同步Oracle的数据至Hologres时,您需要参考本文,在数据源中完成网络、白名单及权限等相关配置,为后续执行数据同步方案做好网络环境及账号权限的准备。

前提条件

配置数据源之前,请确保已完成以下规划与准备工作。
  • 准备数据源:已购买来源数据源Oracle、去向数据源Hologres。
  • 资源规划与准备:已购买独享数据集成资源组,并完成资源配置。详情可参见资源规划与配置
  • 网络环境评估与规划:进行数据集成前,您需根据业务情况,打通数据源、独享数据集成资源组之间的网络,网络联通后参考本文进行交换机、白名单等网络环境下的访问配置。
    • 如果数据源和独享数据集成资源组均处于同地域的同一VPC网络中,数据源与资源组间的网络天然联通。
    • 如果数据源和独享数据集成资源组均处于不同的网络环境中,您需要通过VPN网关等方式,将数据源与资源组间的网络打通。

背景信息

同步来源数据源的数据至去向数据源时,您需要保障数据源与DataWorks的独享数据集成资源组在网络上是联通的,且不存在账号权限的访问限制。同时,需要确保Oracle数据源中不存在数据集成不支持的字符编码及数据类型。
  • 网络白名单
    以下以使用同一VPC网络环境为例,您需要将数据集成资源组所在的VPC网段添加至白名单中,保障数据集成资源组可访问数据源。网络联通vpc
  • 账号权限

    您需要规划一个可访问数据源的账号,用于后续数据集成过程中访问数据源并进行数据提取、写入的同步操作。

  • 日志权限
    来源数据源为Oracle时,您需要开启数据库级别的Redo日志及补充日志。
    • Redo日志:Oracle通过Redo日志来保证数据库的事务可以被重新执行,从而使得在故障(例如断电)之后,数据可以被恢复,因此您需要为数据库开启并切换Redo日志。
    • 补充日志:补充日志是对Redo日志中信息的补充。在Oracle中,Redo日志用于记录被修改的字段的值,而补充日志是对Redo日志中变更记录的补充信息,可以确保Oracle的Redo日志包含描述所有数据更改的完整信息,以便在进行数据恢复、数据同步等操作时,可以追溯到完整的语句及相关变更。Oracle数据库的某些功能要求启用补充日志才能正常或更好的工作,因此您需要为数据库开启补充日志。

      例如,如果未启用补充日志,执行UPDATE命令后,Redo日志中只会记录通过UPDATE命令更改后的字段值,启用补充日志后,则Redo日志中会记录被修改字段,修改前的值、修改后的值以及修改目标字段的条件值。当数据库发生故障(例如断电)时,您可以基于此修改信息恢复数据。

      使用数据集成时推荐开启主键列或唯一索引列补充日志。
      • 开启主键列的补充日志后,如果数据库有任何更新,则组成主键的所有列都会被记录在日志中。
      • 开启唯一索引列的补充日志后,如果组成唯一键或位图索引的任何列被修改,则组成该唯一键或位图索引的列都会被记录在日志中。
  • 检查数据库的字符编码格式

    您需要确保Oracle中不能包含数据集成不支持的字符编码格式,防止同步数据失败。当前数据集成同步数据时,仅支持UTF8、AL32UTF8、AL16UTF16及ZHS16GBK编码格式。

  • 检查是否包含不支持的数据类型

    您需要确保Oracle中不能包含数据集成不支持的数据类型,防止同步数据失败。当前数据集成进行实时同步时,不支持LONG、BFILE、LONG RAW及NCLOB数据类型 。

使用限制

  • Oracle仅支持在主库中为主库或备库开启补充日志。
  • 当前数据集成同步数据时,仅支持UTF8、AL32UTF8、AL16UTF16及ZHS16GBK编码格式。
  • 当前数据集成进行实时同步时,不支持LONG、BFILE、LONG RAW及NCLOB数据类型 。

操作步骤

  1. 配置白名单。
    将独享数据资源组所在的VPC网段添加至Oracle的白名单中,操作如下:
    1. 查看并记录独享数据资源组所在的VPC网络。
      1. 登录DataWorks控制台
      2. 在左侧导航栏,单击资源组列表
        • 获取交换机网段

          通过VPC内网同步数据时,需获取并添加独享资源组交换机网段至数据库白名单,获取交换机网段信息步骤如下。

          独享资源组页签下,单击数据集成资源组后的专有网络绑定,查看交换机网段并将其添加至数据库白名单中。交换机网段
        • 获取EIP的IP地址及网段

          通过外网同步数据时,需获取并添加独享资源组本身的EIP信息至数据库白名单,获取EIP信息步骤如下。

          独享资源组页签下,单击数据集成资源组后的查看信息,复制对话框中的EIP地址网段至数据库白名单。EIP
    2. 将上述步骤中记录的独享数据集成资源组的EIP地址和网段添加至Oracle集群的白名单中。
  2. 创建账号并配置账号权限。
    您需要规划一个数据库的登录账户用于后续执行操作,此账号需要拥有Oracle的相关操作权限。
    1. 创建账号。
      操作详情请参见创建Oracle账号
    2. 配置权限。
      您可以参考以下命令为账号添加相关权限。如下执行语句在实际使用时,请替换'同步账号'为上述创建的账号。
      grant create session to '同步账号';  //授权同步账号登录数据库。
      grant connect to '同步账号';  //授权同步账号连接数据库。
      grant select on nls_database_parameters to '同步账号';  //授权同步账号查询数据库的nls_database_parameters系统配置。
      grant select on all_users to '同步账号';  //授权同步账号查询数据库中的所有用户。
      grant select on all_objects to '同步账号';  //授权同步账号查询数据库中的所有对象。
      grant select on DBA_MVIEWS to '同步账号';  //授权同步账号查看数据库的物化视图。
      grant select on DBA_MVIEW_LOGS to '同步账号';  //授权同步账号查看数据库的物化视图日志。
      grant select on DBA_CONSTRAINTS to '同步账号';  //授权同步账号查看数据库所有表的约束信息。
      grant select on DBA_CONS_COLUMNS to '同步账号';  //授权同步账号查看数据库中所有表指定约束中所有列的相关信息。
      grant select on all_tab_cols to '同步账号';  //授权同步账号查看数据库中表、视图和集群中列的相关信息。
      grant select on sys.obj$ to '同步账号';  //授权同步账号查看数据库中的对象。sys.obj$表是Oracle字典表中的对象基础表,存放Oracle的所有对象。
      grant select on SYS.COL$ to '同步账号';  //授权同步账号查看数据库表中列的定义信息。SYS.COL$用于保存表中列的定义信息。
      grant select on sys.USER$ to '同步账号';  //授权同步账号查看数据库的系统表。sys.USER$是用户会话的默认服务。
      grant select on sys.cdef$ to '同步账号';  //授权同步账号查看数据库的系统表。
      grant select on sys.con$ to '同步账号';  //授权同步账号查看数据库的约束信息。sys.con$记录了Oracle的相关约束信息。
      grant select on all_indexes to '同步账号';  //授权同步账号查看数据库的所有索引。
      grant select on v_$database to '同步账号';  //授权同步账号查看数据库的v_$database视图。
      grant select on V_$ARCHIVE_DEST to '同步账号';  //授权同步账号查看数据库的V_$ARCHIVE_DEST视图。
      grant select on v_$log to '同步账号';  //授权同步账号查看数据库的v_$log视图。v_$log用于显示控制文件中的日志文件信息。
      grant select on v_$logfile to '同步账号';  //授权同步账号查看数据库的v_$logfile视图。v_$logfile包含有关Redo日志文件的信息。
      grant select on v_$archived_log to '同步账号';  //授权同步账号查看数据库的v$archived_log视图。v$archived_log包含有关归档日志的相关信息。
      grant select on V_$LOGMNR_CONTENTS to '同步账号';  //授权同步账号查看数据库的V_$LOGMNR_CONTENTS视图。
      grant select on DUAL to '同步账号';   //授权同步账号查看数据库的DUAL表。DUAL是用来构成select语法规则的虚拟表,Oracle的中DUAL中仅保留一条记录。
      grant select on v_$parameter to '同步账号';  //授权同步账号查看数据库的v_$parameter视图。v$parameter是Oracle的动态字典表,保存了数据库参数的设置值。
      grant select any transaction to '同步账号';  //授权同步账号查看数据库的任意事务。
      grant execute on SYS.DBMS_LOGMNR to '同步账号';  //授权同步账号使用数据库的Logmnr工具。Logmnr工具可以帮助您分析事务,并找回丢失的数据。
      grant alter session to '同步账号';  //授权同步账号修改数据库的连接。
      grant select on dba_objects to '同步账号';  //授权同步账号查看数据库的所有对象。
      grant select on v_$standby_log to '同步账号';  //授权同步账号查看数据库的v_$standby_log视图。v_$standby_log包含备用库的归档日志。
      grant select on v_$ARCHIVE_GAP to '同步账号';  //授权同步账号查询缺失的归档日志。
      如果您涉及使用离线全量同步数据,还需要执行如下命令,授权同步账号所有表的查询权限。
      grant select any table to '同步账号'; 
      Oracle 12c及之后的版本需要执行如下命令,授权同步账号可以进行日志挖掘。Oracle 12c之前的版本,内置日志挖掘功能,无需执行该命令。
      grant LOGMINING TO '同步账号';
  3. 开启补充日志并切换Redo日志文件。
    您需要进入主库执行如下操作:
    1. 开启补充日志。

      您可以根据需要选择开启合适的补充日志,SQL语句如下。

      alter database add supplemental log data(primary key) columns; //为数据库的主键列开启补充日志。
      alter database add supplemental log data(unique) columns; //为数据库的唯一索引列开启补充日志。
    2. 切换Redo日志文件。
      开启补充日志后,您需要多次(一般建议执行5次)执行如下命令,切换Redo日志文件。
      alter system switch logfile;
      说明 多次执行上述命令切换Redo日志文件,是保证当前日志文件被写满后可以切换至下一个日志文件。使执行过的操作记录不会丢失,便于后续恢复数据。
  4. 检查数据库的字符编码。
    您需要在当前使用的数据库中,执行如下命令检查数据库的字符编码。
    select * from v$nls_parameters where PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
    • v$nls_parameters用于存放数据库参数的设置值。
    • NLS_CHARACTERSETNLS_NCHAR_CHARACTERSET为数据库字符集和国家字符集,表明ORACLE中两大类字符型数据的存储类型。
    当前数据集成同步数据时,仅支持UTF8、AL32UTF8、AL16UTF16及ZHS16GBK编码格式。如果数据库中包含不支持的字符编码,请进行修改后再执行数据同步。
  5. 检查数据库表的数据类型。
    您可以使用查看表的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的数据源列表中,便于后续创建数据同步方案时关联来源和去向数据源。

添加数据源操作可参见添加数据源