项目中使用Oracle的CDC达到增量同步功能,需要打开Oracle的CDC开关,同时涉及到了相应日志的优化工作。
1. 打开归档日志开关(启动LogMiner)
a. 使用有DBA权限的用户登录Oracle
b. 检查数据库日志模式
SQL> select log_mode from v$database;
如果结果是ARCHIVELOG,可以转至步骤2。
如果结果是NOARCHIVELOG,执行下面SQL命令
SQL> shutdown immediate; # Shut down the database
SQL> startup mount; # Start up and mount the database
SQL> alter database archivelog; # enable archiving
SQL> alter database open; # open the database
查看存储路径
select dest_id,name from v$archived_log;
2. 启用 Supplemental Logging
为了从日志里获取数据,LogMiner需要启用数据库或表的supplemental logging。Supplemental logging又分为identification key logging和full supplemental logging。Identification key logging只包含主键和发生改变的字段数据,而full supplemental logging包含了所有字段的数据,这两种根据需求选择一种即可。
启用Identification key logging
可以指定一张表启用
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER TABLE <schema name>.<table name> ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
也可以同时为数据库中所有表启用
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
启用full supplemental logging
指定一张表启用
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER TABLE <schema name>.<table name> ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
为数据库中所有表启用
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
提交修改
ALTER SYSTEM SWITCH LOGFILE;
创建用户
在CDC Client源中需要配置账户信息连接Oracle,要求该用户有一定权限,所以这里新建一个用户。
CREATE USER <user name> IDENTIFIED BY <password>;
GRANT create session, alter session, execute_catalog_role, select any transaction, select any table to <user name>;
GRANT select on GV_$DATABASE to <user name>;
GRANT select on GV_$ARCHIVED_LOG to <user name>;
GRANT select on V_$LOGMNR_CONTENTS to <user name>;
GRANT select on <db>.<table> TO <user name>;
用户通过使用V$ARCHIVE_DEST和$ARCHIVE_LOG视图获取归档日志信息。
V$ARCHIVE_DEST:显示当前所有归档日志存储位置及其状态。
V$ARCHIVE_LOG:显示历史归档日志信息。
创建CDC_TEST用户,密码为123456。注意,这里同样需要使用具有DBA权限的用户操作。
SQL> create user CDC_TEST identified by 123456;
SQL> grant create session, alter session, execute_catalog_role, select any transaction, select any table to CDC_TEST;
SQL> grant select on GV_$DATABASE to CDC_TEST;
SQL> grant select on GV_$ARCHIVED_LOG to CDC_TEST;
SQL> grant select on V_$LOGMNR_CONTENTS to CDC_TEST;
4. 提取LogMiner Dictionary到redo log
当希望LogMiner使用来自redo log中的字典时,需要执行此步骤,将字典提取到redo log中,且必须在启动pipeline之前执行。如果使用online catlog中的字典,则不需要。
EXECUTE DBMS_LOGMNR_D.BUILD(OPTIONS=> DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);
|