1. ORACLE 配置说明
Oracle 实时同步基于Oracle LogMiner,因此需要提前进行某些配置。请按以下说明进行配置,确保在 FineTube 中正常进行Oracle 实时增量同步。
2. 开启方法(作为源)
2.1 开启 LogMiner
以具有 DBA 权限的用户身份登录数据库
查看数据库的 logging mode : SELECT log_mode FROM v$database;
如果返回的结果是 ARCHIVELOG , 您可以直接跳到 开启 Supplemental Logging
如果返回的结果是 NOARCHIVELOG , 继续按照以下步骤操作:
关闭数据库: SHUTDOWN IMMEDIATE;
启动并挂载数据库:STARTUP MOUNT;
开启存档并打开数据库:
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
2.2 开启 Supplemental Logging
2.2.1 Oracle 9i
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
2.2.2 Oracle 10g、11g
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER SYSTEM SWITCH LOGFILE;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
2.2.3 Oracle 12C 的特殊配置方法
使用以下命令,确认 supplemental logging 是否开启
SELECT supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_all FROM v$database;
如果返回的三列都是 Yes 或者 Implicit ,则表示 identification key logging(标识键日志)和 full supplemental logging(全补充日志)已同时开启,您可以跳到 第三步 创建用户账号。
如果返回的前两列是 Yes 或者 Implicit ,则表示只开启了 identification key logging(标识键日志),需要对full supplemental logging(全补充日志)进行开启。
① 若第一列返回的是No,则开启补充最小日志-supplemental_log_data_min:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
② 若第二列返回的是No,则开启全补充日志,增加ALL、主键、Unique Index:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA(ALL, PRIMARY KEY, UNIQUE) COLUMNS;
2.3.4 单表开启标识键、补充日志
① 单表开启 identification key(标识键日志)
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER TABLE <schema name>.<table name> 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 SYSTEM SWITCH LOGFILE;
3 创建用户账号
3.1 Oracle 10g、11g
创建用户帐户并分配权限
CREATE USER <user name> IDENTIFIED BY <password>;
GRANT create session, alter session, execute_catalog_role, select any dictionary, select any transaction, select any table, create any table, create any index, unlimited tablespace to <user name>;
3.2 Oracle 12c multitenant databases
在 Oracle 12c 的多租户环境下创建用户,必须在 cdb 中创建,并且命名格式约定为:c##<name>
以具有 DBA 权限的用户身份登录数据库
创建普通用户:
ALTER SESSION SET CONTAINER=cdb$root;
CREATE USER <user name> IDENTIFIED BY <password> CONTAINER=all;
GRANT create session, alter session, set container, select any dictionary, select any transaction, logmining, execute_catalog_role, create any table, create any index, unlimited tablespace TO <username> CONTAINER=all;
ALTER SESSION SET CONTAINER=<pdb>;
根据您对表的权限需求,重复执行最后一个命令来赋予 select 权限。
当您配置的是源库连接时,请使用此用户来通过 JDBC 的身份验证。 注意必须使用整个用户名(包括“c ##”)作为JDBC连接的用户名。
3.3 Oracle 12c standard databases
在 Oracle 12c 标准模式下,创建一个用户所必须的权限:
以具有DBA权限的用户身份登录数据库
创建普通用户:
CREATE USER <user name> IDENTIFIED BY <password>;
GRANT create session, alter session, select any dictionary, select any transaction, logmining, execute_catalog_role, create any table, create any index, unlimited tablespace TO <username>;
根据您对表的权限需求,重复执行最后一个命令来赋予 select 权限。
4 已知问题
4.1 Oracle 的日志空间和定时删除
Oracle的LogMiner归档日志较大,建议提前给Oracle的日志预留足够的使用空间;
当日志积累到一定量之后,建议需要对日志做定时删除的操作,否则会占用过多空间,影响数据库的正常使用;
已经删除的日志,不能回溯到之前的时间点重新读取日志;推荐7~30天作为日志保留周期。
定时删除可参考此篇文档:Oracle 定时清理归档日志脚本_鲨鱼胃的博客-CSDN博客_oracle自动删除归档日志脚本
4.2 Oracle 的 connection_time
connect_time 参数将自动断开超时的会话。 默认情况下,它是无限的。 设置此设置后,FineTube 的实时增量同步可能报错停止。 可以采用以下命令检查设置的值:
select resource_name, limit from dba_profiles where profile=( select profile from dba_users where username = '<username>');