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

OGG报错解决 跳过报错事务

最帅dba工作笔记 2018-06-28
7272

OGG 跳过报错事务

环境介绍:

OS:redhet 5.6 

Database:11.2.0.1

Host name (ip): source  192.168.1.20

                          target   192.168.1.40

SID: 192.168.1.20 tests  

       192.168.1.40 testt


故障模拟:

当前OGG支持DDL模式,进程中配置的和前几篇文章一样是Test.*。


现在target 端创建一个test表。

 

我们再向source端创建一个test表


并且向表内插入一条数据。(注意想要模拟这个实验,插入数据这一步会很重要)


这个时候我们观察进程的状态,我们会发现target端的replicat进程会因此ABENDED,我们多次启动,仍然是ABENDED,现在的问题就是我这个报错卡在这过不去了,当然我要是删掉target端的test.test表再启动,肯定是可以起来的,但是在生产上,如果我的表现在就是有数据的,我这部分数据还不能丢,那这个情况我们就不能再使用删表的这种方法了。


解决方法:

怎么都起不来,现在我们使用ogg的logdump工具去跳过这个错误的事务,具体解决方法如下:

我们先看下这个当前Replicat进程应用到了哪个队列,哪个RBA的时候出了错。


我们发现是/dirdat/tt000004队列,RBA 3949号出了问题。

我们进入logdump定位,并且跳过错误的事务:


打开tt000004文件,从RBA为0的那个位置开始显示

n表示next,我们发现在3949后面还有一个insert的操做,RBA为5283。n到最后已经没有显示了,证明记录就到此为止。

之后我们在GGSCI当中设置进程的RBA号为5238,启动进程。

当前target端的replicat进程的RBA从3949跳到了5283。

启动进程。start repntt

这时这个进程已经能正常启动了。

我们查看一下target数据

这条数据已经过来了;

注意:

这一点其实就是我们一直说的,支持DDL同步的OGG问题经常会很多,而且很奇怪,维护起来会十分头疼,有各种各样的报错产生,会经常导致同步停止。我在生产上见过的真是不多。

扩展:

  • 这种方法是通过定位RBA号去跳过报错信息的,我这里说一下啥叫做RBA号:    

            RBA号和SCN号是经常出现的两个名字,我们都知道SCN号叫系统更改号,英文全拼(SYSTEM CHANGE NUMBER), 这个值是不断的刷新在数据文件,控制文件,redo文件当中,从而保证数据的一致性的号码。而这里我们说到的RBA,叫做重做块地址,英文全拼是(REDO BLOCK ADDRESS),其作用就是在数据库实例恢复的时候,在日志当中记录从哪个点开始恢复,这个值也会向控制文件当中记录,就像我们实验当中体现的那样,我们可以通过队列当中记录的RBA号,跳过出问题的阶段,从而继续让数据库工作。

  • 当然还有种方法是通过更改ogg replicat进程的配置将报错号写入进程配置当中。忽略掉数据库报错,从而使得进程不Abend,这种方法一般使用的时候都是有预知性的。方法就是在进程当中配置:

            DDLERROR ( 1430,discard)

           1430就是以ORA-开头的报错号,将这个报错放到了discard文件当中,然后一旦下次遇到这种报错,就不会导致进程abend,虽然效果差不多,但是使用的情况不同,这里忽略实验,只是简单的提一下下。

THAT'S ALL 

BY CUI PEACE!!!!!!



本文分享自微信公众号 - 最帅dba工作笔记,如有侵权,请联系 service001@enmotech.com 删除。
最后修改时间:2019-12-18 15:36:16
文章转载自最帅dba工作笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论