通过数据订阅功能,您可以实时订阅源库的增量数据,轻松帮助业务实现轻量级缓存更新、业务异步解耦、含ETL逻辑的数据实时同步等场景。本文为您介绍如何创建Oracle数据订阅通道。

前提条件

  • 自建Oracle数据库的版本为9i、10g、11g版本,且不支持为RAC实例。
  • 自建Oracle数据库已开启Supplemental Logging,且要求supplemental_log_data_pk,supplemental_log_data_ui已开启,详情请参见Supplemental Logging
  • 自建Oracle数据库已开启ARCHIVELOG(归档模式),设置合理的归档日志保持周期且归档日志能够被访问,详情请参见ARCHIVELOG

注意事项

  • 由于使用gh-ost或pt-online-schema-change等类似工具执行在线DDL变更不会被订阅到,客户端在将消费到的数据写入目标表时可能会因为表结构不一致而导致写入失败。
  • 如果订阅的源数据库还处于其他任务中(例如该数据库还存在于某个正在运行的数据迁移任务中),您可能会订阅到订阅对象以外的数据,此类场景中,您需要手动在订阅客户端中过滤掉不需要的数据。

准备工作

登录待订阅的Oracle数据库,创建用于数据订阅的数据库账号并授授予DBA权限。

注意 如需订阅增量数据,且不允许授予DBA权限,您需要按照如下方法开启归档和补充日志,并为Oracle数据库账号授予更精细化的权限。

  1. 开启归档和补充日志。
    日志类型 开启步骤
    归档日志 执行如下命令,开启归档日志:
    shutdown immediate;
    startup mount;
    alter database archivelog;
    alter database open;
    archive log list;
    补充日志 按业务需求,选择开启库级别补充日志或者表级别补充日志:
    说明 开启库级别补充日志,则DTS任务运行更为稳定;开启表级别补充日志,则更节约源Oracle数据库的磁盘空间。
    • 开启库级别补充日志
      1. 打开最小补充日志:
        alter database add supplemental log data;
      2. 开启库级主键、唯一键补充日志:
        alter database add supplemental log data (primary key,unique index) columns;
    • 开启表级补充日志
      1. 打开最小补充日志:
        alter database add supplemental log data;
      2. 开启表级补充日志(两者选其一) :
        • 开启表级别主键补充日志
          alter table table_name add supplemental log data (primary key) columns;
        • 开启表级别全字段补充日志
          alter table tb_name add supplemental log data (all) columns ;
  2. 为Oracle数据库账号授予更精细化的权限。
    #创建数据库账号(以rdsdt_dtsacct为例)并进行授权
    create user rdsdt_dtsacct IDENTIFIED BY rdsdt_dtsacct;
    grant create session to rdsdt_dtsacct;
    grant connect to rdsdt_dtsacct;
    grant resource to rdsdt_dtsacct;
    grant execute on sys.dbms_logmnr to rdsdt_dtsacct;
    grant select on V_$LOGMNR_LOGS to rdsdt_dtsacct;
    grant select on all_objects to rdsdt_dtsacct;
    grant select on all_tab_cols to rdsdt_dtsacct;
    grant select on dba_registry to rdsdt_dtsacct;
    grant select any table to rdsdt_dtsacct;
    grant select any transaction to rdsdt_dtsacct;
    -- v$log privileges
    grant select on v_$log to rdsdt_dtsacct;
    -- v$logfile privileges
    grant select on v_$logfile to rdsdt_dtsacct;
    -- v$archived_log privileges
    grant select on v_$archived_log to rdsdt_dtsacct;
    -- v$parameter privileges
    grant select on v_$parameter to rdsdt_dtsacct;
    -- v$database privileges
    grant select on v_$database to rdsdt_dtsacct;
    -- v$active_instances privileges
    grant select on v_$active_instances to rdsdt_dtsacct;
    -- v$instance privileges
    grant select on v_$instance to rdsdt_dtsacct;
    -- v$logmnr_contents privileges
    grant select on v_$logmnr_contents to rdsdt_dtsacct;
    -- system tables
    grant select on sys.USER$ to rdsdt_dtsacct;
    grant select on SYS.OBJ$ to rdsdt_dtsacct;
    grant select on SYS.COL$ to rdsdt_dtsacct;
    grant select on SYS.IND$ to rdsdt_dtsacct;
    grant select on SYS.ICOL$ to rdsdt_dtsacct;
    grant select on SYS.CDEF$ to rdsdt_dtsacct;
    grant select on SYS.CCOL$ to rdsdt_dtsacct;
    grant select on SYS.TABPART$ to rdsdt_dtsacct;
    grant select on SYS.TABSUBPART$ to rdsdt_dtsacct;
    grant select on SYS.TABCOMPART$ to rdsdt_dtsacct;

操作步骤

  1. 购买数据订阅通道,详情请参见购买流程
    说明 购买时选择订阅实例类型Oracle并选择源实例所属的地域。
  2. 登录数据传输控制台
  3. 在左侧导航栏,单击数据订阅
  4. 数据订阅列表页面上方,选择订阅通道所属地域。
    选择地域
  5. 定位至已购买的数据订阅通道,单击配置订阅通道
  6. 配置数据订阅的源库信息和网络类型。
    配置源库信息和网络类型
    类别 配置 说明
    订阅名称 DTS会自动生成一个订阅名称,建议配置具有业务意义的名称(无唯一性要求),便于后续识别。
    源库信息 实例类型 根据源实例的类型进行选择,本文以ECS上的自建数据库为例介绍配置流程。
    说明 当自建数据库为其他实例类型时,您还需要执行相应的准备工作,详情请参见准备工作概览
    数据库类型 固定为Oracle,不可变更。
    实例地区 购买数据订阅通道时选择的源实例地域,不可变更。
    ECS实例ID 选择自建Oracle数据库所属的ECS实例ID。
    端口 填入自建Oracle数据库的服务端口。
    SID 填入自建Oracle数据库的SID信息。
    数据库账号 填入自建Oracle的数据库账号。
    说明 创建及授权方法请参见准备工作
    数据库密码 填入该数据库账号对应的密码。
    消费网络类型 设置数据订阅实例所属的网络类型。
    说明
    • 建议配置同部署数据订阅客户端的ECS实例属于同一网络。例如ECS是专有网络,那么此处的网络类型选择为专有网络并指定ECS所属的专有网络虚拟交换机
    • 通过内网地址进行数据订阅时,网络延迟最小。
    • 经典网络

      如果设置为经典网络,无需其他配置。关于经典网络介绍请参见经典网络

    • 专有网络

      如果设置为专有网络,您还需要选择专有网络虚拟交换机。关于专有网络介绍请参见专有网络

  7. 上述配置完成后,单击授权白名单并进入下一步,详细说明请参见下表。
    源库实例类型 说明
    ECS上的自建数据库 此步骤会将DTS服务器的IP地址自动添加至ECS实例的内网入方向规则中,用于保障DTS服务器能够正常连接源实例。
    • 通过专线/VPN网关/智能网关接入的自建数据库
    • 无公网IP:Port的数据库(通过数据库网关DG接入)
    • 有公网IP的自建数据库
    如果源库具备白名单安全设置,您需要将DTS服务器的IP地址加入至自建数据库的白名单安全设置中,详情请参见迁移、同步或订阅本地数据库时需添加的IP白名单
  8. 配置需要订阅的数据类型和订阅对象。
    选择数据类型和订阅对象
    配置 说明
    需要订阅的数据类型
    • 数据更新

      订阅已选择对象的增量数据更新,包含数据的INSERT、DELETE和UPDATE操作。

    • 结构更新

      订阅整个实例所有对象的结构创建、删除及修改,您需要使用数据订阅客户端过滤所需的数据。

    说明
    • 如果选择整个库作为订阅对象,那么该库中新增对象的增量数据也可以被订阅到。
    • 如果选择某个表作为订阅对象,那么只有这个表的增量数据可以被订阅到。此时如果需要加入一个新的表作为订阅对象,您需要将其加入至订阅对象中,详情请参见修改订阅对象
    订阅对象

    订阅对象框中将想要订阅的对象选中,单击向右小箭头图标将其移动到已选择对象框。

    说明 订阅对象支持选择的粒度为库、表。
  9. 上述配置完成后,单击页面右下角的保存并预检查
    说明
    • 在订阅任务正式启动之前,会先进行预检查。只有预检查通过后,才能成功启动订阅任务。
    • 如果预检查失败,单击具体检查项后的提示,查看失败详情。根据提示修复问题后,重新进行预检查。
  10. 预检查对话框中显示预检查通过后,关闭预检查对话框。
    配置完成后,数据订阅通道会进入初始化阶段,该阶段一般会持续1分钟左右。初始化完成后即可进行新增消费组与消费订阅数据的操作。

后续步骤

  1. 新增消费组
  2. 使用Kafka客户端消费订阅数据
  3. 使用SDK示例代码消费订阅数据