1. 概述
1.1 版本
| FineDataLink 版本 | 功能变动 |
|---|---|
| 5.0.6.3&4.2.13.3 | 实时任务、实时管道读取时,适配物理备库ADG模式 |
1.2 应用场景
Oracle 主库基本都用于支撑业务系统,实时对接 Oracle 主库解析日志取数会给 Oracle 主库带来额外的压力,降低 Oracle 主库的性能从而影响客户业务系统的使用。客户期望在使用实时管道/实时任务对接 Oracle 的同时能够降低对于主库的影响。
1.3 功能简介
实时任务、实时管道读取时,适配物理备库ADG模式。本文介绍物理备库ADG模式的数据库准备操作。
Oracle 主库数据库环境准备请参见:Oracle环境准备(LogMiner)、Oracle环境准备(XStream)、Oracle环境准备(独立日志解析)
1.4 使用限制
1)只适合源表结构变化不频繁的场景。
因为字典文件是从主库创建的,只记录了创建时的表结构信息,那么后续发生 DDL 以字典文件去解析肯定是错乱的。当发生 DDL 后采集器会因为解析到异常 SQL ,对应表采集异常,实时管道任务也会随之停止。
用户如果需要按照新的表结构继续同步,只需要重新生成一份字典文件即可。
2)支持的对接方式为 LogMiner 。
3)必须要 DDL 归档了才能确保字典一定有新表,不然可能字典文件里会识别不到新加的表。
2. 前提条件
确认数据库版本:Oracle 11g 、Oracle 12 C及以上版本才支持 ADG 模式。
数据库为物理备库 ADG 模式的判断方法:
SELECT DBID, DB_UNIQUE_NAME, DATABASE_ROLE, OPEN_MODE, CONTROLFILE_TYPE, PROTECTION_MODE
FROM V$DATABASE;
返回结果:

DATABASE_ROLE:代表数据库当前角色,PHYSICAL STANDBY 为物理备库。
OPEN_MODE:值为 READ ONLY WITH APPLY 代表 ADG 模式。
3. 操作步骤
对于 ADG 备库我们只能读取归档日志(Archived Log),无法读取在线日志(Online redo log)。Logminer 参数也无法使用 DBMS_LOGMNR.CONTINUOUS_MINE 参数,所以只能手动添加日志。
3.1 创建字典文件
3.1.1 Oracle 11g
需要在主库上创建字典文件,再将字典文件复制至ADG备库上。首次创建字典文件目录可能需要重启主库。
1)创建字典文件目录
ALTER SYSTEM SET UTL_FILE_DIR = '/u01/app/oracle/logmnr' SCOPE=SPFILE;
2)生成字典文件
DBMS_LOGMNR_D.BUILD(
DICTIONARY_FILENAME => 'dictionary.ora',
DICTIONARY_LOCATION => '/u01/app/oracle/logmnr',
OPTIONS => DBMS_LOGMNR_D.STORE_IN_FLAT_FILE);
END;
3.1.2 Oracle 12C 及之后版本
1)创建字典文件目录
// SQL指定目录
CREATE OR REPLACE DIRECTORY LOGMNR_DIR AS '/u01/app/oracle/logmnr';// 在操作系统中创建目录
# 创建目录(如果不存在)
sudo mkdir -p /u01/app/oracle/logmnr
# 设置权限
sudo chown oracle:oinstall /u01/app/oracle/logmnr
sudo chmod 775 /u01/app/oracle/logmnr
2)生成字典文件
BEGIN
DBMS_LOGMNR_D.BUILD(
DICTIONARY_FILENAME => 'dictionary_rac.ora',
DICTIONARY_LOCATION => 'LOGMNR_DIR', -- 使用目录对象名而非路径
OPTIONS => DBMS_LOGMNR_D.STORE_IN_FLAT_FILE
);
END;
3.2 日志准备
详情请参见:Oracle环境准备(LogMiner)
3.3 用户权限配置
普通用户权限设置:
GRANT SELECT ANY TRANSACTION TO <普通用户名>;
3.4 配置数据连接
配置 Oracle 数据连接时,需要设置 LogMiner字典文件路径 。如下图所示:

