配置Oracle数据源

创建实时同步Oracle的数据至Kafka的任务前,需要参考本文配置Oracle的账号权限以及在Oracle主库或备库开启补充日志。

使用限制

  • Oracle仅支持在主库中为主库或备库开启补充日志。

  • 当前数据集成同步数据时,仅支持UTF8、AL32UTF8、AL16UTF16及ZHS16GBK编码格式。

  • 当前数据集成进行实时同步时,不支持LONG、BFILE、LONG RAW及NCLOB数据类型。

  • 实时同步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)。

操作步骤

  1. 创建账号并配置账号权限。

    您需要规划一个数据库的登录账户用于后续执行操作,此账号需要拥有Oracle的相关操作权限。

    1. 创建账号。

      您可以参考以下命令为数据库创建账号。

      create example test identified by example;
    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 '同步账号';  //授权同步账号查询缺失的归档日志。
  2. 开启归档日志、补充日志并切换Redo日志文件。

    您需要进入主库执行如下操作:

    1. 开启归档日志,SQL语句如下。

      shutdown immediate;
      startup mount;
      alter database archivelog;
      alter database open;
    2. 开启补充日志。

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

      alter database add supplemental log data(primary key) columns; //为数据库的主键列开启补充日志。
      alter database add supplemental log data(unique) columns; //为数据库的唯一索引列开启补充日志。
    3. 切换Redo日志文件。

      开启补充日志后,您需要多次(一般建议执行5次)执行如下命令,切换Redo日志文件。

      alter system switch logfile;
      说明

      多次执行上述命令切换Redo日志文件,是保证当前日志文件被写满后可以切换至下一个日志文件。使执行过的操作记录不会丢失,便于后续恢复数据。

  3. 检查数据库的字符编码。

    您需要在当前使用的数据库中,执行如下命令检查数据库的字符编码。如果数据库中包含除UTF8、AL32UTF8、AL16UTF16及ZHS16GBK编码以外的字符编码,请进行修改后再执行数据同步。

    select * from v$nls_parameters where PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
    • v$nls_parameters用于存放数据库参数的设置值。

    • NLS_CHARACTERSET及NLS_NCHAR_CHARACTERSET为数据库字符集和国家字符集,表明Oracle中两大类字符型数据的存储类型。

  4. 检查数据库表的数据类型。

    如果表里包含LONG、BFILE、LONG RAW及NCLOB数据类字段类型,请将该表从实时同步任务列表中移除,或修改表字段类型后再执行数据同步。您可以使用查看表的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';,查询目标表的所有信息,获取数据类型。