创建实时同步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)。
操作步骤
创建账号并配置账号权限。
您需要规划一个数据库的登录账户用于后续执行操作,此账号需要拥有Oracle的相关操作权限。
创建账号。
您可以参考以下命令为数据库创建账号。
create example test identified by example;
配置权限。
您可以参考以下命令为账号添加相关权限。如下执行语句在实际使用时,请替换
'同步账号'
为上述创建的账号。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 '同步账号'; //授权同步账号查询缺失的归档日志。
开启归档日志、补充日志并切换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日志文件,是保证当前日志文件被写满后可以切换至下一个日志文件。使执行过的操作记录不会丢失,便于后续恢复数据。
检查数据库的字符编码。
您需要在当前使用的数据库中,执行如下命令检查数据库的字符编码。如果数据库中包含除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中两大类字符型数据的存储类型。
检查数据库表的数据类型。
如果表里包含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';
,查询目标表的所有信息,获取数据类型。