Oracle LogMiner

简介

Oracle 实时同步基于Oracle LogMiner

开启 LogMiner

使用具有 SYSDBA 权限的用户连接到 Oracle 数据库。

sqlplus / as sysdba

查看数据库的 logging mode :

SELECT log_mode FROM v$database;

如果返回的结果是 ARCHIVELOG , 您可以直接跳到 开启 Supplemental Logging

如果返回的结果是 NOARCHIVELOG , 继续按照以下步骤操作:

关闭数据库:

SHUTDOWN IMMEDIATE;

启动并挂载数据库:

STARTUP MOUNT;

开启存档并打开数据库:

ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

开启 Supplemental Logging

Oracle 9i

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;

Oracle 10g、11g

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER SYSTEM SWITCH LOGFILE;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

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(全补充日志)进行开启。

单表开启标识键、补充日志

单表开启 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;

创建用户账号

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>;

Oracle 12c multitenant databases

在 Oracle 12c 的多租户环境下创建用户,必须在 cdb 中创建,并且命名格式约定为:c## 以具有 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连接的用户名。

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>;

已知问题

Oracle 的日志空间和定时删除

Oracle的LogMiner归档日志较大,建议提前给Oracle的日志预留足够的使用空间; 当日志积累到一定量之后,建议需要对日志做定时删除的操作,否则会占用过多空间,影响数据库的正常使用; 已经删除的日志,不能回溯到之前的时间点重新读取日志;推荐7~30天作为日志保留周期。

Oracle 的 connection_time

connect_time 参数将自动断开超时的会话。 默认情况下,它是无限的。

Last updated

Was this helpful?