首批通过分布式安全可靠测评,为关键业务系统打造
新建 Oracle 至 DataHub 的数据同步项目
更新时间:2023-06-25 10:18:37
阿里云流数据处理平台 DataHub 是流式数据(Streaming Data)的处理平台,提供对流式数据的发布、订阅和分发功能,让您可以轻松构建基于流式数据的分析和应用。
前提条件
已创建 Oracle 数据源,并确认连通性,需要确定 Oracle 账号权限满足用户权限说明。详情请参见 添加 Oracle 数据源。
已创建 DataHub 数据源,并确认连通性。详情请参见 添加 DataHub 数据源。
OMS 支持自动创建 Topic。如果您需要自行创建,请提前在 DataHub 控制台准备。详情请参见 创建 Topic。
使用限制
如果 Oracle 使用生成列,OMS 当前不会解析生成列的实际数值。因此,同步至 DataHub 时,对应的值为 NULL。
如果 Oracle 使用了 CLOB、BLOB、RAW 和 LONG RAW 等数据类型,涉及这些字段的 INSERT 操作会在 DataHub 接收到 INSERT 和 UPDATE 消息。
当一条链路意外中断进行断点续传时,可能会存在部分重复数据(最近一分钟内),需要下游具备排重能力。
Oracle 至 DataHub 同步支持范围
同步 Oracle 的数据至 DataHub,支持增量 DML(INSERT、UPDATE 和 DELETE)。
下表为 Oracle DataType 的支持情况。
| 数据类型 | 映射 DataHub 类型 |
|---|---|
| CHAR | STRING |
| NCHAR | STRING |
| VARCHAR2 | STRING |
| NVARCHAR2 | STRING |
| CLOB | STRING |
| NCLOB | STRING |
| BLOB | STRING |
| NUMBER | DECIMAL |
| BINARY_FLOAT | FLOAT64 |
| BINARY_DOUBLE | FLOAT64 |
| DATE | STRING |
| TIMESTAMP | STRING |
| TIMESTAMP WITH TIME ZONE | STRING |
| TIMESTAMP WITH LOCAL TIME ZONE | STRING |
| INTERVAL YEAR TO MONTH | STRING |
| INTERVAL DAY TO SECOND | STRING |
| BFILE | STRING |
| LONG | STRING |
| RAW | STRING |
| LONG RAW | STRING |
| ROWID | STRING |
| UROWID | STRING |
检查和修改 Oracle 源端的配置
检查 Oracle 源端字符集的配置
源端为 Oracle 时,OMS 支持字符集配置为 AL32UTF8、AL16UTF16、ZHS16GBK 或 GB18030 的数据同步。
检查和修改 Oracle 实例的系统配置
在 Oracle 源端开启 archivelog 和补偿日志。
在 Oracle 中,以 sys 用户执行以下查询。
确认 log_mode 配置为 archivelog,supplemental_log 相关的配置均为 yes 或 implicit。如果不符合,请根据如下方法修改 Oracle 源数据库系统。
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; ALTER DATABASE ADD SUPPLEMENTAL LOG DATA(PRIMARY KEY) COLUMNS; ALTER DATABASE ADD SUPPLEMENTAL LOG DATA(UNIQUE) COLUMNS;(可选)建议您设置 Oracle 数据库的系统参数
_log_parallelism_max为 1,通常该系统参数默认为 2。SELECT NAM.KSPPINM,VAL.KSPPSTVL,NAM.KSPPDESC FROM SYS.X$KSPPI NAM,SYS.X$KSPPSV VAL WHERE NAM.INDX= VAL.INDX AND NAM.KSPPINM LIKE '_%' AND UPPER(NAM.KSPPINM) LIKE '%LOG_PARALLEL%'; ALTER SYSTEM SET "_LOG_PARALLELISM_MAX" =1 SCOPE=SPFILE;完成上述操作后,重启实例。
补充 Properties
如果自行创建 Topic,启动同步任务前,请在 DataHub 的 Schema 中补充下述 Properties。如果由 OMS 自动创建 Topic 和结构同步,OMS 会自动补充下述 Properties。
| 名称 | 类型 | 含义 |
|---|---|---|
| oms_timestamp | STRING | 发生变更的时间。 |
| oms_table_name | STRING | 源端为表时,变更表名。 |
| oms_database_name | STRING | 源端为数据库时,变更库名。 |
| oms_sequence | STRING | 变更序列号。承诺相同机器上,同一个主键不断递增。 |
| oms_record_type | STRING | 变更类型,包括 UPDATE、INSERT 和 DELETE。 |
| oms_is_before | STRING | 如果是 UPDATE 类型,Y 表示该条数据为变更前的数据。 |
| oms_is_after | STRING | 如果是 UPDATE 类型,Y 表示该条数据为变更后的数据。 |
操作步骤
新建同步项目。
登录 OMS 控制台。
在左侧导航栏,单击 数据同步 。
在 数据同步 页面,单击 新建同步项目 > 新建数据库到大数据同步项目 。
选择源和目标。
在 选择源和目标 页面,选择 同步类型 为 Oracle→DataHub。
设置 同步链路名称。
说明
同步链路名称支持中文、数字和英文字母的组合,且不得超过 500 个字符。
从 源端 下拉列表中选择 Oracle 数据源。
表类型 默认为 单表,选择需要同步的 数据表。在左侧选中需要同步的数据表,单击 >,将其添加至右侧列表中。
设置 目标端。
参数 描述 数据源 从下拉列表中选择已创建的 DataHub 数据源。 您可以单击 查看数据源 ,进入 数据源列表 页面查看所有已创建的数据源。 Topic 输入一个已存在的 Topic。如果您未创建 Topic,可以直接输入 Topic 名称,OMS 会在目标端自动创建该 Topic。 单击 下一步。
设置同步选项。
设置源端同步选项。
参数 描述 源端选项 当前版本支持增量同步,您可以同步以下数据变更 DML: Insert Delete * Update 同步起始位点 指定同步某个时间节点之后的数据。 您可以选择时间节点,也可以直接输入时间戳。 该位点与当前归档日志的保留时间密切相关。如果无特殊要求,可以从当前位点开始启动。 单击 下一步 。
预检查并启动数据同步任务。
系统会自动完成数据同步的预检查。在 预检查 环节,OMS 会检测和目标端的连接情况。如果预检查报错,请排查并处理问题后,重新执行预检查,直至预检查成功。
预检查成功后,请单击 保存 并 启动任务 ,OMS 会直接创建数据同步任务。您也可以在左侧导航栏,单击 数据同步 ,在 数据同步 页面手动启动该数据同步任务。
如果中途接入数据的过程出错(通常由于网络不通或进程启动过慢导致),您可以进入任务的详情页面,单击右上角的 恢复 (此处为了延时,使用暂停再恢复)。
您还可以在该页面查看 延时时间 和 查看组件监控 。

验证数据
在数据库 INSERT/UPDATE 后,验证数据如下。
INSERTINTO bt.oms_source_test(oms_number,oms_varchar2, oms_char, oms_nvarchar2, oms_long_raw, oms_clob, oms_nclob,oms_raw, oms_float, oms_binary_double, oms_binary_float, oms_date, oms_blob,oms_timestamp, oms_tp_with_time_zone, oms_tp_with_local_timezone,oms_interval_year_to_month, oms_interval_day_to_second, oms_bfile)values(4, '1', '1', '1', '123', '1234', '12345', '123456', 1.3, 1.234, 1.23, sysdate, '12345', sysdate, sysdate, sysdate, numtoyminterval(5, 'year'), to_dsinterval('10 02:03:02.3312'), bfilename('/tmp/', 'test.dmp'));
UPDATE bt.OMS_SOURCE_TESTSET OMS_VARCHAR2 ='update'WHERE OMS_NUMBER =4 DELETEFROM bt.OMS_SOURCE_TESTWHERE OMS_NUMBER=4
