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

ogg之replicat进程关于事务异常的几种处理方法

IT那活儿 2022-03-20
3276

点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!

最近在客户现场,客户表示有使用OGG的一些需求,在此之前也使用OGG11g相比较老的一些版本,其中的原理也是懂一些。官网ogg版本已经更新至19.1、20.3,按照数据库在生产中版本使用的思想,这里选择了使用19.1次新版本进行验证测试。在此次使用的过程中碰到的事务的一些问题,及处理方法进行简单分享。

环境介绍

源端:RHEL 6.8+Oracle 11.2.0.4+OGG 19.1

目标端:RHEL 7.6+Oracle 19.10.0.0+OGG 19.1

同步模式:schema级别DDL同步

异常分析

目标端REPLICAT进程ABENDED,检查日志发现在ORA-00942: table or view does not exist的错误之后REPLICAT进程ABENDED。manager配置文件中已配置autorestart er *,进行重启多次无法解决此问题。

根据错误提示在目标库查询此表已不存在,ogg复制执行sql失败,导致进程ABENDED。

GGSCI (os-app02) 1> info allProgram Status Group Lag at Chkpt Time Since ChkptMANAGER RUNNINGREPLICAT ABENDED REP1 02:11:40      00:02:252021-12-09T14:15:59.955+0000  ERROR OGG-00516  Oracle GoldenGate Delivery for Oracle, rep1.prm: Fatal error executing DDL replication: error [Error code [942], Error code [942], Error code [942], Error code [942], ORA-00942: table or view does not exist], due to explicit ABEND error handling and filter [include all (default)].2021-12-09T14:16:05.072+0000  INFO OGG-02333  Oracle GoldenGate Delivery for Oracle, rep1.prm: Reading /u01/app/ogg/dirdat/rt000000011, current RBA 2,903, 0 records, m_file_seqno = 11, m_file_rba = 4,191.2021-12-09T14:16:05.074+0000  ERROR OGG-01668  Oracle GoldenGate Delivery for Oracle, rep1.prm: PROCESS ABENDING.

处理方法

方法一:

使用logdump分析trail文件,获取事务NEXT RBA,跳过异常事务。目标库对象已不存在,此sql已不必须,跳过执行sql事务即可恢复。

1)查看复制进程当前处理的文件和处理到的RBA地址:

GGSCI (os-app02) 15> info rep1REPLICAT   REP1      Last Started 2021-12-09 14:52   Status RUNNINGINTEGRATEDCheckpoint Lag       02:08:38 (updated 00:00:07 ago)Process ID           22906Log Read Checkpoint  File /u01/app/ogg/dirdat/rt0000000112021-12-09 12:44:08.040185  RBA 2903

2)由于RBA不是简单+1的关系,需要使用ogg提供的logdump定位下一个事务的RBA:

[oracle@os-app02 ogg]$ ./logdumpLogdump 18 >open u01/app/ogg/dirdat/rt000000011 --打开trail文件Current LogTrail is u01/app/ogg/dirdat/rt000000011Logdump 19 >pos 2903   --定位当前RBAReading forward from RBA 2903Logdump 20 >n --NEXT2021/12/09 12:44:08.040.185 DDLOP Len 1179 RBA 2903Name:After Image: Partition x04 G s2c43 3137 2827 3127 293d 274e 4c53 5f4e 554d 4552 | ,C17('1')='NLS_NUMER4943 5f43 4841 5241 4354 4552 5327 2c2c 4331 3828 | IC_CHARACTERS',,C18(2731 2729 3d27 2e5c 2c27 2c2c 4331 3728 2732 2729 | '1')='.\,',,C17('2')3d27 4e4c 535f 4441 5445 5f46 4f52 4d41 5427 2c2c | ='NLS_DATE_FORMAT',,4331 3828 2732 2729 3d27 4444 2d4d 4f4e 2d52 5227 | C18('2')='DD-MON-RR'2c2c 4331 3728 2733 2729 3d27 4e4c 535f 5449 4d45 | ,,C17('3')='NLS_TIME5354 414d 505f 464f 524d 4154 272c 2c43 3138 2827 | STAMP_FORMAT',,C18('Logdump 21 >n --NEXT2021/12/09 06:24:49.484.843 Metadata Len 83 RBA 4191Database Name:3000 4f00 0100 0200 0100 0200 3a00 0100 0400 ea27 | 0.O.........:......'0000 0200 0400 0100 0000 0300 0200 0000 0400 0800 | ....................0600 2b30 383a 3030 0500 1400 1000 0000 1414 1414 | ..+08:00............1414 1414 1414 1414 1114 1414 0300 0700 0500 4150 | ..................AP5030 31                                           | P01

3)重新指定REPLICAT进程的当前RBA以跳过当前事务,重启REPLICAT进程。

GGSCI (os-app02) 1> alter replicat rep1,extrba 41912021-12-09 15:02:19  INFO    OGG-06594  Replicat REP1 has been altered. Even the start up position might be updated, duplicate suppression remains active in next startup. To override duplicate suppression, start REP1 with NOFILTERDUPTRANSACTIONS option.REPLICAT (Integrated) altered.GGSCI (os-app02) 2> start rep1Sending START request to MANAGER ...REPLICAT REP1 startingGGSCI (os-app02) 3> info allProgram     Status      Group       Lag at Chkpt  Time Since ChkptMANAGER     RUNNINGREPLICAT    RUNNING     REP1        00:00:00      00:00:35

可以看到REPLICAT进程已恢复正常。

方法二:

目标端处理异常,满足sql执行条件。

分析异常sql为drop table xxxx;删除表操作,在目标库创建一对象名为xxxx的空表,成功执行drop即可恢复。本文示例表明emp_222。

1)在目标库对应用户下创建一表,表名与异常sql中表名一致:

15:13:09 SCOTT@app02> create table emp_222(name varchar2(10));Table created.Elapsed: 00:00:00.00

2)重启REPLICAT进程:

GGSCI (os-app02) 7> start rep1Sending START request to MANAGER ...REPLICAT REP1 startingGGSCI (os-app02) 8> info allProgram     Status      Group       Lag at Chkpt  Time Since ChkptMANAGER     RUNNINGREPLICAT    RUNNING     REP1        00:00:00      00:00:01

REPLICAT进程已恢复正常。

方法三:

OGG提供错误忽略机制,可以根据错误代码跳过错误。

1)异常的错误代码为942,确认所有此类异常均可跳过,在REPLICAT参数文件中添加DDLERROR配置信息:

GGSCI (os-app02) 2> edit params rep1DDLERROR 942 IGNORE

2)重启REPLICAT进程:

GGSCI (os-app02) 3> start rep1Sending START request to MANAGER ...REPLICAT REP1 startingGGSCI (os-app02) 4> info allProgram     Status      Group       Lag at Chkpt  Time Since ChkptMANAGER     RUNNINGREPLICAT    RUNNING     REP1        00:00:00      00:00:03

REPLICAT进程已恢复正常。

注:以上处理方法,可以根据不同的场景结合使用,无论那种方式,均需要以保证数据完整性、一致性为前提。



本文作者:王亚奇

本文来源:IT那活儿(上海新炬王翦团队)

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论