实时同步Oracle的数据至DataHub时,来源数据源为Oracle,去向数据源为DataHub,执行同步任务前,您需要参考本文在数据源中配置好网络、白名单等配置,为后续的数据同步做好网络环境和账号权限的准备。
前提条件
- 准备数据源:已购买来源数据源Oracle、去向数据源DataHub。
- 资源规划与准备:已购买独享数据集成资源组,并完成资源配置。详情可参见资源规划与配置。
- 网络环境评估与规划:进行数据集成前,您需根据业务情况,打通数据源、独享数据集成资源组之间的网络,网络联通后参考本文进行交换机、白名单等网络环境下的访问配置。
- 如果数据源和独享数据集成资源组均处于同地域的同一VPC网络中,数据源与资源组间的网络天然联通。
- 如果数据源和独享数据集成资源组均处于不同的网络环境中,您需要通过VPN网关等方式,将数据源与资源组间的网络打通。
背景信息
- 网络白名单以下以使用同一VPC网络环境为例,您需要将数据集成资源组所在的VPC网段添加至白名单中,保障数据集成资源组可访问数据源。
- 账号权限
您需要规划一个可访问数据源的账号,用于后续数据集成过程中访问数据源并进行数据提取、写入的同步操作。
- 查看当前使用的数据库版本是否为DataWorks数据集成实时同步任务所支持的版本。
DataWorks的数据集成实时同步Oracle数据是基于Oracle Logminer日志分析工具实现的。实时同步Oracle数据目前仅支持配置Oracle数据源为Oracle的
10g
、11g
、12c non cdb
、18c non cdb
或19c non cdb
版本数据库,不支持配置为Oracle的12c cdb
、18c cdb
及19c cdb
版本数据库。数据库容器CDB(Container Database)是Oracle 12c及之后版本的数据库新特性,用于承载多个可插拔数据库PDB(Pluggable Database)。- 您可以通过如下任意语句查看Oracle数据库的版本。
- 语句一:
select * from v$version;
- 语句二:
select version from v$instance;
- 语句一:
- 如果查看到的Oracle数据库版本为
12c
、18c
或19c
,则您需要使用如下语句进一步确认该数据库是否为cdb
类型的数据库。DataWorks数据集成实时同步任务暂不支持使用cdb
类型的Oracle数据库。select name,cdb,open_mode,con_id from v$database;
说明 如果当前使用的数据库版本不是DataWorks数据集成实时同步任务支持的Oracle数据库版本,请尽快更换为数据集成实时同步任务支持的Oracle数据库版本,否则会导致数据集成任务无法执行。 - 您可以通过如下任意语句查看Oracle数据库的版本。
- 日志权限来源数据源为Oracle时,您需要开启数据库级别的归档日志、Redo日志及补充日志。
- 归档日志:Oracle通过归档日志保存所有的重做历史记录,用于在数据库出现故障时完全恢复数据库。
- Redo日志:Oracle通过Redo日志来保证数据库的事务可以被重新执行,从而使得在故障(例如断电)之后,数据可以被恢复,因此您需要为数据库开启并切换Redo日志。
- 补充日志:补充日志是对Redo日志中信息的补充。在Oracle中,Redo日志用于记录被修改的字段的值,而补充日志是对Redo日志中变更记录的补充信息,可以确保Oracle的Redo日志包含描述所有数据更改的完整信息,以便在进行数据恢复、数据同步等操作时,可以追溯到完整的语句及相关变更。Oracle数据库的某些功能要求启用补充日志才能正常或更好的工作,因此您需要为数据库开启补充日志。
例如,如果未启用补充日志,执行UPDATE命令后,Redo日志中只会记录通过UPDATE命令更改后的字段值,启用补充日志后,则Redo日志中会记录被修改字段,修改前的值、修改后的值以及修改目标字段的条件值。当数据库发生故障(例如断电)时,您可以基于此修改信息恢复数据。
使用数据集成时推荐开启主键列或唯一索引列补充日志。- 开启主键列的补充日志后,如果数据库有任何更新,则组成主键的所有列都会被记录在日志中。
- 开启唯一索引列的补充日志后,如果组成唯一键或位图索引的任何列被修改,则组成该唯一键或位图索引的列都会被记录在日志中。
DataWorks数据集成实时同步Oracle数据前,您需要确保已为数据库开启归档日志及补充日志。查看当前使用的数据库是否开启数据库级别的归档日志及补充日志的SQL语句如下。select log_mode, supplemental_log_data_pk, supplemental_log_data_ui from v$database;
- 当
log_mode
的返回结果为ARCHIVELOG,则表示数据库的归档日志已开启,当返回结果不为ARCHIVELOG,则表示数据库的归档日志未开启,您需要参考本文操作步骤的《开启归档日志》,开启归档日志。 - 当
supplemental_log_data_pk
及supplemental_log_data_ui
的返回结果为YES,则表示数据库的补充日志已开启,当返回结果为FALSE,则表示数据库的补充日志未开启,您需要参考本文操作步骤的《开启补充日志》,开启补充日志。
- 检查数据库的字符编码格式
您需要确保Oracle中不能包含数据集成不支持的字符编码格式,防止同步数据失败。当前数据集成同步数据时,仅支持UTF8、AL32UTF8、AL16UTF16及ZHS16GBK编码格式。
- 检查是否包含不支持的数据类型
您需要确保Oracle中不能包含数据集成不支持的数据类型,防止同步数据失败。当前数据集成进行实时同步时,不支持LONG、BFILE、LONG RAW及NCLOB数据类型 。
使用限制
- Oracle仅支持在主库中为主库或备库开启补充日志。
- 当前数据集成同步数据时,仅支持UTF8、AL32UTF8、AL16UTF16及ZHS16GBK编码格式。
- 实时同步Oracle数据目前仅支持配置Oracle数据源为Oracle的
10g
、11g
、12c non cdb
、18c non cdb
或19c non cdb
版本数据库,不支持配置为Oracle的12c cdb
、18c cdb
及19c cdb
版本数据库。数据库容器CDB(Container Database)是Oracle 12c及之后版本的数据库新特性,用于承载多个可插拔数据库PDB(Pluggable Database)。
注意事项
- DataWorks数据集成实时同步任务,目前对于Oracle主库支持订阅联机重做日志(Online Redo),对于Oracle备库仅支持订阅归档日志。因此,对于时效性要求比较高的实时同步任务,建议订阅主库的实时增量变更。订阅Oracle备库时,Oracle日志的产生到可以被获取的最短延迟时间取决于Oracle的自动切换归档日志的时间,不能保证时效性。
- Oracle数据库的归档日志建议保留3天。当写入大批量数据至Oracle数据库时,实时同步数据的速度可能会慢于日志生成的速度,方便在同步任务出现问题时,为追溯数据预留足够的时间。您可以通过分析归档日志排查问题并恢复数据。
- DataWorks数据集成实时同步任务,不支持对Oracle数据库中无主键的表进行
truncate
操作。对于无主键表进行日志分析(即logminer
操作)是根据Rowid
进行回查,当遇到truncate
操作时会修改原表的Rowid
,该操作会导致同步任务运行报错。 - 在规格为
24 vCPU 192 GiB
的DataWorks上运行实时同步任务时,如果非update
等操作日志较多,并且速度达到约每秒记录3~5W条数据的极限速度,则Oracle服务器的单核CPU使用率最高可以达到25%~35%;如果处理update
等操作日志,则处理实时同步消息的DataWorks机器可能会存在性能瓶颈,Oracle服务器的单核CPU使用率仅可以达到1%~5%。
操作步骤
- 配置白名单。将独享数据资源组所在的VPC网段添加至Oracle的白名单中,操作如下:
- 创建账号并配置账号权限。您需要规划一个数据库的登录账户用于后续执行操作,此账号需要拥有Oracle的相关操作权限。
- 开启归档日志、补充日志并切换Redo日志文件。您需要进入主库执行如下操作:
- 开启归档日志,SQL语句如下。
shutdown immediate; startup mount; alter database archivelog; alter database open;
- 开启补充日志。
您可以根据需要选择开启合适的补充日志,SQL语句如下。
alter database add supplemental log data(primary key) columns; //为数据库的主键列开启补充日志。 alter database add supplemental log data(unique) columns; //为数据库的唯一索引列开启补充日志。
- 切换Redo日志文件。开启补充日志后,您需要多次(一般建议执行5次)执行如下命令,切换Redo日志文件。
alter system switch logfile;
说明 多次执行上述命令切换Redo日志文件,是保证当前日志文件被写满后可以切换至下一个日志文件。使执行过的操作记录不会丢失,便于后续恢复数据。
- 开启归档日志,SQL语句如下。
- 检查数据库的字符编码。您需要在当前使用的数据库中,执行如下命令检查数据库的字符编码。
select * from v$nls_parameters where PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
- v$nls_parameters用于存放数据库参数的设置值。
- NLS_CHARACTERSET及NLS_NCHAR_CHARACTERSET为数据库字符集和国家字符集,表明Oracle中两大类字符型数据的存储类型。
当前数据集成同步数据时,仅支持UTF8、AL32UTF8、AL16UTF16及ZHS16GBK编码格式。如果数据库中包含不支持的字符编码,请进行修改后再执行数据同步。 - 检查数据库表的数据类型。您可以使用查看表的SQL相关语句(SELECT)查询数据库表的数据类型。示例查看'tablename'表数据类型的语句如下。
select COLUMN_NAME,DATA_TYPE from all_tab_columns where TABLE_NAME='tablename';
- COLUMN_NAME:表的列名称。
- DATA_TYPE:对应列的数据类型。
- all_tab_columns:存放数据库表所有列相关信息的视图。
- TABLE_NAME:需要查询的目标表的名称。执行上述语句时,请替换'tablename'为实际需要查看的表名称。
select * from 'tablename';
,查询目标表的所有信息,获取数据类型。当前数据集成进行实时同步时,不支持LONG、BFILE、LONG RAW及NCLOB数据类型 。如果表里包含这些字段类型,请将该表从实时同步任务列表中移除,或修改表字段类型后再执行数据同步。
后续步骤
配置完成数据源后,来源数据源、资源实例、去向数据源彼此间已可网络联通,且不存在访问限制。您可将来源数据源和去向数据源添加至DataWorks的数据源列表中,便于后续创建数据同步方案时关联来源和去向数据源。
添加数据源操作可参见添加数据源。