暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OGG复制进程因DDL操作abandon,进程跳转到指定RBA启动,或设置忽略DDL操作

原创 陈坤 云和恩墨 2021-10-25
3160

起因:

在使用OGG升级迁移过程中,已经完成了数据迁移切换,配置了反向的同步进程,开发反馈新库缺少一个应用用户,于是dba在新库创建了该用户,授予表的权限,由于旧库并没有此用户,DDL操作通过反向的OGG进程同步到旧库,导致OGG应用进程挂掉,查看report,报错是有DDL操作。

ERROR OGG-00519 Fatal error executing DDL replication:error [Error code [972],


解决方案1:

OGG应用进程跳到指定的RBA

查询当前应用的trail文件和RBA:

info xxxrep

可以看到当前应用的tail文件名:

lt000000000

RBA 541120

查询ggcsi目录:

which ggsci

/u01/app/extract/ggsci

进到ggsci目录下:

cd /u01/app/extract/ggsci

打开logdump:

./logdump

打开tail文件:

Logdump 8> open /u01/app/extract/dirdatrccd2/lt000000000

跳到当前RBA位置

Logdump 8> pos 541120

再输入

Logdump 8> n

可以看到,下一个RBA要执行的操作

例如:

2017/07/05 08:40:51.937.520 DDLOP             Len   1236 RBA 542487

Name: UCR_TRADE_02.TF_B_ORDER 

After  Image:                                             Partition 4   G  b   

 0000 0018 0000 0014 3137 3037 3035 3038 3430 3532 | ........170705084052  

 3730 3933 3331 3235 0001 000a 0000 0000 0000 0000 | 70933125............  

 0019 0002 0022 0000 001e 3130 3034 3031 3130 3930 | ....."....1004011090  

 3431 3730 3730 3530 3834 3035 3231 3131 3239 3631 | 41707050840521112961  

 0003 0004 0000 3034 0004 0005 0000 3031 3700 0500 | ......04......017...  

 0500 0031 3631 0006 0004 ffff 0000 0007 0004 ffff | ...161..............  

 0000 0008 0015 0000 3230 3137 2d30 372d 3035 3a30 | ........2017-07-05:0 


其中第一行的DDLOP表示该操作是DDL操作。于是可以用n继续跳过

直到找到

非DDL操作的,例如:

2017/07/05 08:40:51.937.520 Insert              Len   1022 RBA 767800

Name: RCCDB200.XXX.AAA_BBB_T (TDR Index: 16)

After  Image:                                             Partition 0xc   G  s  

 0000 0018 0000 0014 3137 3037 3035 3038 3430 3532 | ........170705084052  

 3730 3933 3331 3235 0001 000a 0000 0000 0000 0000 | 70933125............  

 0019 0002 0022 0000 001e 3130 3034 3031 3130 3930 | ....."....1004011090  

 3431 3730 3730 3530 3834 3035 3231 3131 3239 3631 | 41707050840521112961  

 0003 0004 0000 3034 0004 0005 0000 3031 3700 0500 | ......04......017...  

 0500 0031 3631 0006 0004 ffff 0000 0007 0004 ffff | ...161..............  

 0000 0008 0015 0000 3230 3137 2d30 372d 3035 3a30 | ........2017-07-05:0  -

这条的操作是insert

记录下这条insert的RBA为767800

退出logdump:

exit

再打开ggsci

ggsci

指定RBA启动OGG复制进程

allter REPLICAT RCCDREP2,extseqno 0,extrba 767800

start RCCDREP2

这样就能跳过报错DDL操作了。


以上是比较笨的办法,logdump其实可以直接跳转到当前事务结束的RBA,也可以设置过滤条件。

一些logdump操作命令:

查看下一条正常的记录:

Logdump 8> SCANFORHEADER

可以直接输入简写:SFH


查看事务的结束位置:

Logdump 9> SCANFORENDTRANS

也可以直接输入简写:SFET.

这个命令会显示下一个事务的第一记录,此时,TransInd的标志应该是0x00


基于表或文件名过滤

如只查看某个表的数据

Logdump 10> FILTER INCLUDE FILENAME [container | catalog] schema.table

设置之后,使用 N 命令,只有符合条件的表的记录才会显示。也可以使用Exclude参数不看某个表的记录。


清除当前过滤条件

FILTER CLEAR

使用过滤条件可以更快找到下一条合适的记录


查看header record信息

Logdump 15 >ghdr on


查看详情

Logdump 16 >detail on
Logdump 17 >detail data


查看用户定义的token

Logdump 18 >usertoken on


解决方案2

在复制进程中配置忽略DDL操作

打开ggsci

ggsci

编辑复制进程参数

edit param RCCDREP2

加入以下参数,保存

DDLERROR DEFAULT IGNORE RETRYOP

重新启动复制进程

start RCCDREP2


也可以等待OGG进程运行正常后,再取注释掉这条参数,保证后面正常的DDL操作可以同步


官方文档参考:

https://www.ateam-oracle.com/post/oracle-goldengate-logdump

https://docs.oracle.com/goldengate/1212/gg-winux/GLOGD/wu_logdump.htm#GLOGD112

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论