记一次OGG集成模式的bug

来源:这里教程网 时间:2026-03-03 23:26:44 作者:

一、现象

在某次银行迁移中,利用 O GG12 . 2 版本的集成模式挖掘 Oracle生产过程中,发现生产端有几张表未挖掘到数据。我们首先想到的是附加日志是否没有添加或是否存在不支持的内容,以下是排查的思路:

排查是否是以下几个原因引起的:

1、  未添加表级别附加日志

2、  不支持的列

3、  不支持的表

4、  表的信息日志为 nologging

下面为检查结果

--检查表级附加日志
info trandata xjm.sys_control 
--检查不支持的列
select owner,table_name,column_name,data_type from dba_tab_columns where owner in ('XJM') and data_type in ('ANYDATA','ANYDATASET','ANYTYPE','BFILE','BINARY_INTEGER','MLSLABEL','PLS_INTEGER','TIMEZONE_ABBR','TIMEZONE_REGION','URITYPE','UROWID');
--检查不支持的表
select * from DBA_LOGSTDBY_UNSUPPORTED where OWNER=’XJM’;
--检查表的日志信息
select owner,table_name from dba_tables where owner in ('XJM') and logging='NO' and temporary='N';

二、分析过程

检查以上信息均为正常,于是从这些发现的不能挖掘的表入手,看看有没有什么共同点,结果还真有发现,这些挖不到数据的表名都是 sys _ 开头的。

于是开始怀疑是否是因为 s ys_ 开头导致 O GG 认为这些表是系统表无法识别到。为了测试方便,我们这里利用一个参数 formatsql ,将挖掘到的数据都可以在 trail文件中显示出来。

关于该参数的详细用法可查看官方文档

https://docs.oracle.com/en/middleware/goldengate/core/12.3.0.1/administer.html

测试 1: 12.2 集成模式下挖掘 s ys_test table

Create table zmy.sys_testtable as select * from dba_objects;
Add trandata zmy.sys_testtable
 
在挖掘参数文件中
Table zmy.*;
 
发现能够挖掘到输出

猜测,可能是需要两个系统关键字,于是再测试 sys_control

测试 2 12.2 集成模式下挖掘 s ys_control

Create table zmy.sys_control as select * from dba_objects;
Add trandata zmy.sys_control
 
在挖掘参数文件中
Table zmy.*;

发现 trail 文件中没有任何的输出

同理,测试了 s ys_currefnum, sys_sch_timeinfo, sys_common_timeinfo,syscontrol ,  sys_sch_control

其中只有 s ys_c 开头的表且含有系统字符的均无法挖掘到数据。

于是将挖掘参数文件里的参数更改为列出具体的表名,如:

Table zmy.sys_control;

发现竟然可以挖出数据。

再次尝试使用经典模式挖掘,发现在经典模式中,不受任何影响,任何表名都可以挖到数据。

猜测是否是 O GG12.2 的版本里出现的一个 bug,于是将O GG 换成更加通用和稳定的 1 2.3 版本以及高版本 1 9C ,结果还是一样的问题,在集成模式下 ,当获取o wner.* 模式是无法获取到 sys _c 开头的且包含系统字符的表名。

三、解决

这个 bug目前原厂并没有解决方案(该问题出现时间较早,截止发文时间还未对新版本做进一步测试,后续会做测试验证并发文结果),能临时解决的两个方法分别是

1、  使用经典模式挖掘

2、  在挖掘参数中列出具体的表名

相关推荐