首批通过分布式安全可靠测评,为关键业务系统打造
创建 Oracle 数据库至 DataHub 的数据同步项目
更新时间:2023-06-25 10:20:37
阿里云流数据处理平台 DataHub 是流式数据(Streaming Data)的处理平台,提供对流式数据的发布、订阅和分发功能,让您可以轻松构建基于流式数据的分析和应用。
前提条件
OMS 支持自动创建 Topic。如果您需要自行创建,请提前在 DataHub 控制台准备。详情请参见 创建 Topic。
缺省情况下,Oracle Store(即 Oracle 增量日志拉取组件)优先以 flashback query 方式回查数据。采用该方式回查数据是为了在一定程度上实现同步过程中的过程一致性。但是,当 Oracle 端产生大量变更数据时,采用这种方式会降低 Oracle Store 的查询性能,同时还可能影响Oracle上的业务查询。
因此,请执行下述操作,关闭 Oracle Store 的 flashback query 查询方式,采用普通查询方式,再启动数据迁移或数据同步项目。
在 drc_cm_db 中插入以下数据:
INSERT INTO config_template( 'task_type', 'db_type', 'task_version', 'key', 'value', 'scope', 'file_name', 'file_path', 'gmt_created', 'gmt_modified', 'dest_db_type' ) VALUES( 'deliver2store', 'oracle', '1.0', 'logminer.enable_flashback_query', 'false', 'deliver2store', 'crawler.conf', '/home/ds/store/store{port}/conf/', now(), now(), null );
使用限制
不支持表中全部列均为 LOB 类型的增量数据同步。
Oracle 的无主键表必须设置分片列,才能正常同步至 DataHub。
如果 Oracle 使用生成列,OMS 当前不会解析生成列的实际数值。因此,同步至 DataHub 时,对应的值为 NULL。
如果 Oracle 使用了
CLOB、BLOB、RAW和LONG RAW等数据类型,涉及这些字段的INSERT操作会在 DataHub 先INSERT部分列的值,另一部分列的值为空,再UPDATE为实际值。当一条链路意外中断进行断点续传时,可能会存在部分重复数据(最近一分钟内),需要下游具备排重能力。
待同步的表名和其中的列名不能包含中文字符。
Oracle 至 DataHub 同步支持范围
同步 Oracle 的数据至 DataHub,支持增量 DML(INSERT、UPDATE 和 DELETE)。
下表为 Oracle 数据类型的支持情况。
| Oracle 数据类型 | 映射 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。select log_mode, supplemental_log_data_pk, supplemental_log_data_ui, supplemental_log_data_min from v$database;如果不符合上述情况,请根据如下方法修改 Oracle 源数据库。
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; ALTER DATABASE ADD SUPPLEMENTAL LOG DATA(PRIMARY KEY) COLUMNS; ALTER DATABASE ADD SUPPLEMENTAL LOG DATA(UNIQUE) COLUMNS;完成上述操作后,重启实例。
补充 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。
设置 同步链路名 称 。
说明
同步链路名称支持中文、数字和英文字母的组合,且不得超过 64 个字符。
单击 标签 文本框,在下拉列表中选择目标标签。您也可以单击 管理标签,进行新建、修改和删除。详情请参见 通过标签管理数据同步项目。
设置 源端。
参数 描述 表类型 目前只能选择 单表。 数据源 如果您已创建 Oracle 数据源,请从下拉列表中进行选择。如果未创建,请单击下拉列表中的 添加数据源,在右侧对话框进行添加。参数详情请参见 添加 Oracle 数据源。 数据表 在下拉列表中输入关键字,搜索目标源端数据表。 注意 待同步的表名和其中的列名不能包含中文字符。 分片列 在分片列下拉列表中选择目标分片列。您可以选择多个字段作为分片列,该参数为选填。 分片列用于区分可并发写入至 MySQL 数据库的数据行。如果分片列值相同,则不会出现并发写入的情况。 注意 请保证分片列的正确性,分片列填写错误会导致数据同步任务失败。 设置 目标端。
参数 描述 数据源 如果您已创建 DataHub 数据源,请从下拉列表中进行选择。如果未创建,请单击下拉列表中的 添加数据源,在右侧对话框进行添加。参数详情请参见 添加 DataHub 数据源。 如果您需要查看 OMS 中所有已创建的数据源,请单击页面下方的 查看数据源。 Topic 输入一个已存在的 Topic。如果您未创建 Topic,可以直接输入 Topic 名称,并在设置同步选项时勾选 初始化结构,OMS 会在目标端自动创建该 Topic。 注意 如果指定的 Topic 不存在,则必须勾选 初始化结构。 单击 下一步。
设置同步类型。
设置源端同步类型。
参数 描述 同步类型和配置 包括 结构同步、全量同步 和 增量同步。 增量同步的 DML 包括 Insert、Delete 和 Update,默认全部勾选。 同步起始位点 指定同步某个时间节点之后的数据,默认为当前系统时间。您可以选择时间节点,也可以直接输入时间戳。 该位点与当前归档日志的保留时间密切相关。如果无特殊要求,可以从当前位点开始启动。 单击 下一步。
系统自动完成对数据同步项目的预检查。
在 预检查 环节,OMS 会检测和目标端的连接情况。如果预检查报错,请排查并处理问题后,重新执行预检查,直至预检查成功。
单击 启动任务,启动该项目的增量同步等各项任务。
如果您暂时无需启动任务,请单击 保存,跳转至数据同步项目的详情页面,您可以根据需要手动启动数据同步项目。如果您需要查看详情,请参见 查看数据同步项目详情。
如果数据同步项目运行报错(通常由于网络不通或进程启动过慢导致),您可以在数据同步的列表或详情页面,单击 恢复。