将Oracle数据同步到表格存储

通过Tapdata Cloud的可视化界面,您可以将Oracle数据实时同步到表格存储(Tablestore)中。

前提条件

使用Tapdata Cloud同步Oracle数据到表格存储前,需要完成如下准备工作。

  • 已注册Tapdata Cloud账号

  • 已创建表格存储实例和表。具体操作,请参见通过控制台使用

  • 创建RAM用户并完成授权。

    • 已创建RAM用户,并授予RAM用户管理表格存储服务的权限(AliyunOTSFullAccess)。具体操作,请参见配置RAM用户权限

      重要

      创建RAM用户时,请选中OpenAPI调用访问

    • 已为RAM用户创建AccessKey。具体操作,请参见创建AccessKey

背景信息

Tapdata Cloud是由Tapdata提供的集数据复制、数据开发为一体的实时数据服务,能够在跨云、跨地域、多类型数据源的场景下,提供毫秒级的实时数据同步服务和数据融合服务。更多信息,请参见什么是Tapdata

注意事项

  • 当前只支持Oracle 9i、10g、11g、12c、19c版本的数据同步。

  • 如果设置了Oracle数据库的connect_time参数,则可能导致实时同步异常。

    您可以通过执行如下命令查看connect_time参数的设置。其中username请设置为数据库账号。

    select resource_name, limit from dba_profiles where profile=( select profile from dba_users where username = 'username');
  • 请为归档日志预留足够的存储空间,避免由于存储占满影响Oracle数据库的运行。

使用流程

使用Tapdata CloudOracle数据同步到表格存储的使用流程如下:

  1. 配置Oracle数据库和授权账号。具体操作,请参见步骤一:配置Oracle数据库和授权账号

  2. Oracle数据库所属机器或相同网络的机器上部署Tapdata Agent。具体操作,请参见步骤二:部署Tapdata Agent

    Tapdata Agent(简称Agent)是数据同步、数据异构、数据开发场景中的关键程序,通过流式技术从源端获取数据、处理转换数据并发送到目标端。

    重要

    Agent通过流式技术从源端获取数据、处理转换数据并发送到目标端,数据不会流经 Tapdata Cloud,也不会上传和留存您的数据。

  3. 使用Tapdata Cloud连接源数据库和目标数据库。具体操作,请参见步骤三:连接源数据库和目标数据库

  4. 创建数据复制任务用于进行源数据库到目标数据库的数据复制。具体操作,请参见步骤四:配置数据复制任务

步骤一:配置Oracle数据库和授权账号

数据同步前,为Oracle数据库开启数据库归档模式、开启补充日志、开启标识键日志、开启全补充日志以及创建用于数据同步任务的账号。

  1. 以具有DBA权限的用户身份登录Oracle数据库。

  2. 开启数据库归档模式(ARCHIVELOG)。

    您可以执行如下命令检查是否已开启数据库归档模式。

    select log_mode from v$database;

    当返回结果为ARCHIVELOG时,表示已经开启,请跳过此步骤。否则请执行如下步骤开启。

    1. 执行如下命令关闭数据库。

      重要

      请务必在业务低峰期再进行此操作,避免影响业务正常运行。

      shutdown immediate;
    2. 执行如下命令启动并挂载数据库。

      startup mount;
    3. 执行如下命令开启归档并打开数据。

      alter database archivelog;
      alter database open;
  3. 开启补充日志(Supplemental Logging),请根据数据库版本执行相应命令。

    数据库版本

    命令

    Oracle 9i

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;

    Oracle 10g

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
    ALTER system switch logfile;
    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

    Oracle 11g

    Oracle 12c

    执行如下命令,确认是否开启了补充日志。

    SELECT supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_all FROM v$database;

    当返回结果的前两列为YesImplicit时,表示只开启了标识键日志(Identification Key Logging),您还需要开启全补充日志(Full Supplemental Logging)。

  4. 开启标识键日志。

    请根据实际选择为单个表开启或者为所有表开启

    • 为单个表开启标识键日志。

      ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
      ALTER TABLE schema name.table name ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
    • 为所有表开启标识键日志。

      ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
  5. 开启全补充日志。

    请根据实际选择为单个表开启或者为所有表开启。

    • 为单个表开启全补充日志

      ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
      ALTER TABLE <schema name>.<table name> ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
    • 为所有表开启全补充日志

      ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
  6. 执行如下命令提交变更。

    ALTER SYSTEM SWITCH LOGFILE;
  7. 创建用于数据同步任务的账号并授权,请根据数据库版本执行相应命令。

    数据库版本

    命令

    Oracle 10g

    CREATE USER username IDENTIFIED BY password;
    GRANT create session, alter session, execute_catalog_role, select any dictionary, select any transaction, select any table, create any table, create any index, unlimited tablespace to user name;

    Oracle 11g

    Oracle 12c(标准模式)

    CREATE USER username IDENTIFIED BY password;
    GRANT create session, alter session, select any dictionary, select any transaction, logmining, execute_catalog_role, create any table, create any index, unlimited tablespace TO username;

    请根据您对表的权限需求,重复执行GRANT命令来赋予SELECT权限。

    Oracle 12c(多租户模式)

    重要

    Oracle 12c的多租户模式下创建用户时,必须在cdb中创建并且命名格式约定为 c##name

    ALTER SESSION SET CONTAINER=cdb$root;
    CREATE USER username IDENTIFIED BY password CONTAINER=all;
    GRANT create session, alter session, set container, select any dictionary, select any transaction, logmining, execute_catalog_role, create any table, create any index, unlimited tablespace TO username CONTAINER=all;
    ALTER SESSION SET CONTAINER=pdb;

    请根据您对表的权限需求,重复执行GRANT命令来赋予SELECT权限。

    Oracle数据库作为源库时,请使用该用户来进行JDBC身份验证。

    重要

    使用该用户进行JDBC的身份验证时,必须使用整个用户名(包含c##)作为JDBC连接的用户名。

步骤二:部署Tapdata Agent

重要

待部署Agent的机器必须能够访问互联网。

由于数据流转通常对时效性有较高的要求,因此,推荐将Tapdata Agent部署在Oracle数据库所属机器或相同网络的机器中,可极大降低网络延迟带来的影响。

说明

此处以Linux操作系统(64位)为例介绍Agent部署流程,如果需要部署到其他平台(例如Windows、阿里云计算巢),请参见安装Agent文档。

  1. 登录Tapdata Cloud平台

  2. 在左侧导航栏,单击Agent管理

  3. Agent管理页面,单击创建Agent

  4. Agent下载与安装对话框,选择Linux(64 bit),然后根据界面提示进行Agent安装。

    重要

    安装前请确认您的部署环境中已安装JAVA 1.8版本并正确配置环境变量。

    1. 登录到待部署Agent的机器。

    2. 执行如下命令创建tapdata目录用于安装和部署Tapdata Agent。

      mkdir tapdata
    3. 单击界面中的复制,复制步骤3的命令,并在tapdata目录下执行命令。

      说明

      执行该命令后,Tapdata Agent会自动下载、自动部署以及启动。

    等待命令执行完成,即可完成Tapdata Agent的安装和启动。

    Tapdata Agent启动成功的示例如下图所示。

    fig_tapdataagent

步骤三:连接源数据库和目标数据库

通过Tapdata Cloud连接源数据库和目标数据库。

  1. 登录Tapdata Cloud平台

  2. 在左侧导航栏,单击连接管理

  3. 连接作为源库的Oracle数据库。

    1. 连接管理页面,单击创建连接

    2. 创建连接对话框的认证数据源页签,单击Oracle

    3. 创建连接页面,根据下表说明配置数据源参数。

      参数

      描述

      连接名称

      数据连接名称,请根据实际设置。多个连接的名称不能相同。

      连接类型

      支持将Oracle作为源头或者目标。此处取值为源头和目标或者源头

      连接方式

      连接Oracle数据库的方式。取值范围如下:

      • SID:数据库实例名,是数据库和操作系统交互时用到的名称。

      • Service Name:服务名。当数据库有域名时,Service NameGlobal DB Name相同;当数据库无域名时,Service Name与数据库名称相同。

      数据库地址

      数据库连接地址。

      端口

      数据库的服务端口。

      SID

      数据库实例名。当连接方式选择为SID时需要配置此参数。

      Service Name

      服务名。当连接方式选择为Service Name时需要配置此参数。

      Schema

      Schema名称,即一个连接对应一个 Schema。

      说明

      如果需要连接多个Schema,请创建多个数据连接。

      其他连接串参数

      额外的连接参数,默认为空。

      账号

      数据库的账号。

      密码

      数据库的密码。

      多租户模式

      如果Oracle为多租户模式,则打开多租户模式开关并填写PDB信息。

      日志插件

      保持默认值logMiner即可。

      时间类型的时区

      默认为数据库所用的时区,您也可以根据业务需求指定。

      包含表

      要包含的表。取值范围如下:

      • 全部(默认):包含数据库中的所有表。

      • 自定义:自定义要包含的表。多个表或表达式之间用半角逗号(,)分隔。表达式支持使用星号(*)表示任意长度的字符。

      排除表

      从包含表规则匹配到的表中将指定的表排除。

      打开排除表开关并设置要排除的表。多个表或者表达式之间用半角逗号(,)分隔。表达式支持使用星号(*)表示任意长度的字符。

      agent设置

      使用的Agent信息。取值范围如下:

      • 平台自动分配(默认):由平台分配节点进行连接访问。

      • 用户手动指定:设置此参数为用户手动指定后,选择要使用的Agent。

      模型加载频率

      数据源中模型数量大于1万时,Tapdata Cloud会按此参数设置定期进行模型刷新。

    4. 单击连接测试,测试通过后单击保存

      说明

      如果提示连接测试失败,请根据页面提示进行修复。

  4. 连接作为目标库的表格存储。

    1. 连接管理页面,单击创建连接

    2. 创建连接对话框的Beta数据源页签,单击Tablestore

    3. 创建连接页面,根据下表说明配置数据源参数。

      参数

      描述

      连接名称

      数据连接名称,请根据实际设置。

      连接类型

      固定取值为目标。此数据连接在Tapdata Cloud中只能作为目标使用,不能作为源头。

      服务地址

      表格存储实例的服务地址。更多信息,请参见服务地址

      实例名称

      表格存储实例的名称。更多信息,请参见实例

      AccessKey ID

      RAM用户的AccessKey IDAccessKey Secret。

      说明

      当使用从STS获取的临时访问凭证访问表格存储时,请设置为临时访问凭证的AccessKey IDAccessKey Secret。

      AccessKey Secret

      AccessKey Token

      临时访问令牌。当使用从STS获取的临时访问凭证访问表格存储时,需要设置此参数。

      agent设置

      使用的Agent信息。取值范围如下:

      • 平台自动分配(默认):由平台分配节点进行连接访问。

      • 用户手动指定:设置此参数为用户手动指定后,选择要使用的Agent。

      模型加载频率

      数据源中模型数量大于1万时,Tapdata Cloud会按此参数设置定期进行模型刷新。

    4. 单击连接测试,测试通过后单击保存

      说明

      如果提示连接测试失败,请根据页面提示进行修复。

步骤四:配置数据复制任务

通过配置数据复制任务,可以现同构或者异构数据源间的实时同步,适用于数据迁移、数据同步、数据灾备、读性能扩展等多种业务场景。

  1. 登录Tapdata Cloud平台

  2. 在左侧导航栏,单击数据复制

  3. 数据复制页面,单击创建

  4. 在页面左侧,将Oracle和表格存储数据库拖拽到右侧画布中,然后将其连接起来。

  5. 单击Oracle数据库,根据下表说明在右侧面板配置参数。

    参数

    描述

    节点名称

    默认为连接名称,请根据实际设置。

    DDL事件采集

    暂不支持对表格存储执行DDL语句同步,无需配置此参数。

    选择表

    选择要复制的表。取值范围如下:

    • 按表名选择:按照表名选择待复制的表。

      待复制表区域选中表,然后单击fig_row图标完成设置。

      您也可以单击批量选表,输入多个表名来批量选择要复制的表。多个表名之间用半角逗号(,)分隔。

    • 按正则表达式进行匹配:使用正则表达式匹配满足表达式的表作为要复制的表。

      使用此方式时,当源库中新增的表满足表达式时,该表也会被自动同步到目标库。

    批量读取条数

    全量同步时,每批次读取的记录条数,默认值为100。 一般保持默认值即可。

    日志连续挖掘

    是否开启日志连续挖掘。默认已开启。请根据使用的Oracle版本设置。

    • Oracle版本低于19c时,建议开启此开关,延迟更低。

    • Oracle版本高于等于19c时,必须关闭此开关。

      重要

      Oracle版本高于等于19c时,请务必关闭此开关。

    日志积压数量

    日志连续挖掘时的最大日志积压数量。只有当开启日志连续挖掘开关时才能设置此参数。请根据源端更新频率设置。

    • 当源端更新频率较低时,请设置较低的值,延迟更低。

    • 当源端更新频率较高时,请设置较高的值,吞吐更高。

    一般可以按照源端数据变化QPS/10计算,建议值为1~1000。

    挖掘线程数

    日志挖掘时,以占用数据库CPU资源为代价来提高日志挖掘速度。只有当关闭日志连续挖掘开关时才能设置此参数。

    建议当源端更新频率超过1万时设置,最大不建议超过8。

    大事务事件界限

    将事务事件定义为大事务的临界值,默认值为10000。当事务事件超过该数值时会进入大事务逻辑。

    重要
    • 该值设置过大可能会影响内存。

    • 按照大事务处理后会存在本地磁盘缓存。当复制任务出现异常时,请注意磁盘清理。

    关联键更新

    是否进行关联键更新。默认已开启,表示会进行关联键更新。

    关闭关联键更新开关可以提升性能,但是关联键的更新会被忽略。

    开启同步LOB类型(BLOB,CLOB,NCLOB)

    是否开启同步LOB类型。默认已开启,表示会同步LOB类型。

    关闭开启同步LOB类型(BLOB,CLOB,NCLOB)开关可以提升性能,但是LOB类型解析会不可靠。

    未提交事务生命时长(分钟)

    未提交事务的最长保留时间,默认值为60。单位为分钟。

    长时间未提交的事务会导致每次启停任务将从该事务开始挖掘,会影响性能,因此超过该时长未提交的事务将被清理。

  6. 单击Tablestore数据库,预览数据结构并设置高级选项。

    参数

    描述

    节点名称

    默认为连接名称,请根据实际设置。

    推演结果

    查看表的数据结构(例如字段名称、字段类型)以及根据需要设置字段类型。

    说明
    • 如需调整字段类型,单击目标字段类型中的fig_down图标,然后在弹出的对话框中完成设置。

    • 由于Tablestore单个表的列数量不可超过32个,如果Oracle中待同步表的列数量超过32,您可以在页面左侧拖拽一个字段编辑节点进来,将其作为OracleTablestore的中间节点连接起来,然后在字段编辑节点中屏蔽与业务无关的列以满足需求。

    高级设置

    重复处理策略

    当目标表已存在时的处理策略,默认为保持目标端原有结构及数据。如果目标表没有数据且结构和源表不一致,可选择为清除目标表原有表结构及数据

    数据写入模式

    数据写入表格存储的处理方式。取值范围如下:

    • 按事件类型处理:根据插入事件、更新事件和删除事件分别设置数据写入策略。

    • 追加写入:只处理插入事件,丢弃更新事件和删除事件。

    数据写入策略

    按照事件类型处理数据写入时的策略。当数据写入模式选择为按事件类型处理时才能设置此参数。

    处理插入事件的策略为目标存在时更新,处理更新事件和删除事件的策略为不存在时丢弃

    全量多线程写入

    全量数据写入的并发线程数,默认值为8,可基于目标端写性能适当调整。

    增量写入线程数

    增量数据写入的并发线程数,默认未启用。打开增量写入线程数开关后可基于目标端写性能适当调整。

  7. 可选:单击上方的fig_settingicon图标,请根据下表说明配置任务属性。

    参数

    描述

    任务名称

    同步任务的名称,请根据实际设置。

    同步类型

    数据同步的类型。取值范围如下:

    • 全量+增量:全量数据同步完成后,再同步增量数据。

    • 全量:将源端的存量数据复制到目标端。

    • 增量:将源端实时产生的新数据或数据变更复制到目标端。

    任务描述

    任务的描述信息。

    高级设置

    计划开始时间

    任务的计划开始时间。

    如果需要指定任务开始时间,打开计划开始时间开关后,选择开始的日期和时间。

    数据校验

    打开数据校验开关后,任务会自动对同步结果的一致性进行全量校验和增量校验,并会在运行监控页面展示校验不一致的数据行数。

    重要

    当任务符合以下任意一种情况时,即使打开数据校验开关,任务也不会进行校验。

    • 添加了中间处理节点。

    • 源连接不支持校验。

    • 目标连接不支持校验。

    增量同步并发写入

    打开增量同步并发写入开关后,增量同步时,源端数据会并发写入目标端。

    增量滞后判断时间设置

    用于快速判断复制任务是否存在滞后。

    打开增量滞后判断时间设置开关并设置判断时间。增量同步时,如果增量同步的滞后时间大于设置的判断时间,则复制任务存在滞后。

    默认值为1,单位为秒。

    处理器线程数

    处理器的线程数。

    增量数据处理模式

    增量同步时,增量数据的处理模式。取值范围为批量逐条

    agent设置

    使用的Agent信息。取值范围如下:

    • 平台自动分配(默认):由平台分配节点进行连接访问。

    • 用户手动指定:设置此参数为用户手动指定后,选择要使用的Agent。

  8. 确认无误后,单击启动

    操作完成后,您可以查看任务的执行情况,例如QPS、延迟、任务时间统计等信息。