【OGG】OGG故障错误处理总结

【OGG】OGG故障错误处理总结



第一章 GoldenGate错误分析与处理

在维护GoldenGate过程中,由于各种意外情况,难免还是会遇到各种各样的问题。掌握一些常见的GoldenGate故障诊断和错误分析的方法是非常有必要的而且掌握这些错误分析工具也进一步加深对GoldenGate产品的认识与对GoldenGate原理的理解。

 

1.1   GoldenGate常见异常处理

GoldenGate运行起来后,随着时间的推移可能会碰到各种各样的问题,下面就来介绍常见的异常现象以及常见的异常处理方法。

1.1.1  异常处理的一般步骤

首先确定是GoldenGate的哪类进程有故障(是抽取,投递还是复制进程有问题),解决故障的一般思路如下。

1通过GGSCI>view report命令查找ERROR字样,确定错误原因并根据其信息进行排除

2通过GGSCI>view ggsevt查看告警日志信息

3检查两端数据库是否正常运行,网络是否连通

4通过logdump工具对队列文件进行分析。

1.1.2  RAC单节点失败

RAC环境下,GoldenGate软件安装在共享目录下可以通过任一个节点连接到共享目录,启动GoldenGate运行界面。如果其中一个节点失败,导致GoldenGate进程中止,可直接切换到另外一个节点继续运行。

操作步骤如下。

1Oracle用户登录源系统(使用另外一个正常的节点)

2确认将GoldenGate安装所在文件系统装载到另一节点相同目录

3确认GoldenGate安装目录属于Oracle用户及其所在组

4确认Oracle用户及其所在组对GoldenGate安装目录拥有读写权限

5进入GoldenGate安装目录

6执行./ggsci进入命令行界面

7执行start mgr启动MGR

8执行start er *启动所有进程

检查各进程是否正常启动,即可进入正常复制。

1.1.3  Extract常见异常

以下为列举的一些常见错误信息作参考用

Extract进程包括抽取与投递进程,投递进程报错大部分原因是由于网络故障。对于源数据库,抽取进程ext**如果变为abended,则可以通过在GGSCI中使用view report命令看报告,可以通过搜索ERROR快速定位错误。

一般情况下,抽取异常的原因是因为其无法找到对应的归档日志,可以通过到归档日志目录命令行下执行

示例9-1:

 

ls –lt arch_x_xxxx.arc

 

查看该日志是否存在,如不存在则可能的原因如下。

“ 日志已经被压缩

“ GoldenGate无法自动解压缩,需要人工解压缩后才能读取

“ 日志已经被删除

如果日志已经被删除,需要进行恢复才能继续复制。

一般需要定期备份归档日志,并清除旧的归档日志。需要保证归档日志在归档目录中保留足够长时间之后,才能被备份和清除。即定期备份清除若干小时之前的归档,而不是全部归档。保留时间计算如下

某归档文件保留时间?抽取进程处理完该文件中所有日志所需的时间

可以通过命令行或者GoldenGate Director Web界面,运行info extxx showch命令查看抓取进程ext处理到哪条日志序列号。在此序列号之前的归档,都可以被安全的清除。

抽取进程在抽取不支持的数据对象时也会abendreport文件会有详细的报错信息,根据report文件来定位错误信息然后再排错即可。

下面再单独列出更多的几个故障

1Extract: Application failded to initializeWin)。

错误信息:run GGSCI command but the Alert window report "Application failded to initialize(0xc000026e)"

GoldenGateWindows平台上需要安装Microsoft Visual C ++ 2005 SP1 Redistributable Package。如果是Microsoft Itanium平台需要安装vcredist_IA64.exe

Windows 2008需以下额外操作:右击‘cmd’ (DOS)选择‘run as administrator’,然后在该命令行窗口中启动MGRExtract才能够读取数据库日志

OGG安装为服务时即运行“install ADDSERVICE”),需要使用管理员权限这样启动服务后即能访问日志。

通过以下方法为运行MGRExtract的用户添加读取日志文件的权限右键击文件->property->security->edit->add。

2Extract: Cannot load program./ggsci…

错误分析:请首先检查该OGG Build是否与操作系统和数据库相符;其次如果是Aix请检查xLC版本是否符合10.0以上。

另外,检查环境变量中动态库路径是否包含了数据库动态库目录,例如:

示例9-2:

 

export LD_LIBRARY_PATH=$ORACLE_HOME/lib

 

不同平台下的环境变量不同

“ AIX  LIBPATH。

“ SolarisLinux  LD_LIBRARY_PATH。

“ HP-Unix  SHLIB_PATH。

重设环境变量需重启MgrExt/Rep进程。

3Extract: Block size mismatch (8192/512)…

裸设备的偏移量各操作系统默认为0,但AIX默认为4096。当创建裸设备时使用了-TO选项时,Oracle不会跳过4096字节而是直接从0开始读写。 因此在AIX下使用裸设备时,出现此错误需要指定OGG从偏移量0开始读取

示例9-3

 

tranlogoptions rawdeviceoffset 0

 

该参数其在实际环境中使用几率非常高在以前版本中如果缺少此参数Extract立即终止,但新版本Extract会持续进行尝试,并不自动终止,需检查报告文件

4Extract: ORA-15000 ASM connection error

该错误为OCI错误,表示Extract是在连接数据库时出现问题,根据错误信息判断为权限问题。

首先在Extract参数中检查ASM相关参数tranlogoptions asmuser sys@+ASM1,asmpassword oracle,再检查tnsnames.oralistener.ora验证ASM实例配置是否正确,确认ASM用户具有SYSDBA 权限;如果使用SYS,需要将ASM实例的init.oraREMOTE_LOGIN_PASSWORDFILE参数设置为SHARED(多个数据库可以使用一个password文件,只有SYS用户可以远程登录)

使用sqlplus验证:

示例9-4

 

sqlplus sys/oracle@asm1 as sysdba //可以登录

sqlplus sys/oracle@asm1;           //报告15000错误

 

5Extract: Encountered SCN That Is Not Greater Than The Highest SCN Already Processed…

原因分析:在Oracle RAC环境中,Extract会启动一个coordinator线程对各个节点上的操作进行根据SCN进行排序,它在交易提交后会等待THREADOPTIONS MAXCOMMITPROPAGATIONDELAY参数所定义时间来确认空闲节点没有交易,然后再收集交易数据;写入该交易后如果空闲节点后来又读到了一个SCN号要小的交易,则会报告该错误

可能原因:

“ 各节点之间没有配置时钟同步

“ 一个节点比另外一个节点慢(IO问题可能性较大

解决办法:

调整Extract参数:

示例9-5

 

THREADOPTIONS MAXCOMMITPROPAGATIONDELAY IOLATENCY

 

MAXCOMMITPROPAGATIONDELAY有效范围是0-90000ms,默认为3s(即3000ms)。

GGS V9.x多了一个IOLATENCY参数,可以与上面参数一起加大等待时间。IOLATENCY默认为1.5s,最大值为180000

建议出现该错误后可以将此二参数设置为较大值,然后逐步降低获取最佳设置

需要补充说明的是,出现此错误后,因后面的交易可能已被写入日志,重启Extract可成功启动,但是可能出现如下问题:Extract会重写当前队列覆盖前面的交易数据,后面的Data Pump进程可能会出现“abend with incompatible record errors”错误终止(旧版本可能出现)。

此问题的恢复步骤如下。

① 停止所有Data PumpReplicat,针对所有的Extract记录其Write Checkpoint的队列Seqno

② 对于每个Extract向下滚动一个队列

示例9-6

 

ALTER EXTRACT [name], ETROLLOVER

 

启动Extract查看是否滚动到了下一个队列,记录其新队列seqno,应当是旧队列号+1

③ 修改Data Pump从新的队列开始传输

示例9-7

 

ALTER EXTRACT [pump_name], EXTSEQNO ##### EXTRBA 0

 

重启Data Pump查看是否能够重启成功并从新的队列传输

④ 修改Replicat参数文件,加入或者打开HANDLECOLLISIONS,如果有GROUPTRANSOPSMAXTRANSOPS请注释掉,启动Replicat,观察其是否能够读取新传输过来的队列如Replicat无法自动滚动到下一个队列,需要通过如下命令手工滚动:

示例9-8

 

alter replicat [replicat_name], EXTSEQNO ##### EXTRBA 0

 

等待Replicat处理到结尾没有延迟时,可以关闭HANDLECOLLISIONS和恢复原来的GROUPTRANSOPSMAXTRANSOPS参数

⑤ 重新启动Replicat即可恢复正常复制。

1.1.4  网络故障

如果MGR进程参数文件里面设置了autorestart参数,GoldenGate可以自动重启,无需人工干预。

当网络不稳定或者发生中断时, GoldenGate负责产生远地队列的Pump进程会自动停止。 此时,MGR进程会定期根据mgr.prm里面autorestart设置自动启动Pump进程以试探网络是否恢复。在网络恢复后,负责产生远程队列的Pump进程会被重新启动,GoldenGate的检查点机制可以保证进程继续从上次中止复制的日志位置继续复制。

需要注意的是,因为源端的抽取进程(Capture)仍然在不断抓取日志并写入本地队列文件,但是Pump进程不能及时把本地队列搬动到远地,所以本地队列文件无法被自动清除而堆积下来需要保证足够容量的存储空间来存储堆积的队列文件计算公式如下

存储容量?单位时间产生的队列大小×网络故障恢复时间

MGR定期启动抓取和复制进程参数配置参考:

示例9-9

 

GGSCI > edit param mgr

port 7809

autorestart er *,waitminutes 3,retries 5,RESETMINUTES 60

 

3分钟重试一次,5次重试失败以后等待60分钟,然后重新试三次。

1.1.5  Replicat进程常见异常

对于目标数据库,投递进程repXX如果变为abended,则可以通过在GGSCI中使用view report命令看报告,可以通过搜索ERROR快速定位错误。

复制进程的错误通常为目标数据库错误,比如:

“ 数据库临时停机

“ 目标表空间存储空间不够

“ 目标表出现不一致。

可以根据报告查看错误原因,排除后重新启动rep进程即可。

需要注意一点:往往容易忽略UNDO表空间。如果DML语句中包含了大量的UPDATEDELETE操作,则目标端UNDO的生成速度会很快,有可能填满UNDO表空间。

典型错误数据复制典型错误如下:

示例9-10

 

- SQL error 1403 mapping  2010-02-25 13:20:08  GGS WARNING     218  Oracle GoldenGate Delivery for Oracle, rep_stnd.prm:  SQL error 1403 mapping HR.MY_EMPLOYEE to HR.MY_EMPLOYEE.

 

可能原因包括以下几个方面。

“ 两端结构不一致(异构环境,列和主键不同

“ 两端有不一致记录

“ 附加日志不全

可以到discard文件中查看具体错误信息,如果为UPDATE或者DELETE找不到对应记录,并且某几个字段为空,则可认定为缺少了附加日志

 

1.2   使用reperror进行错误处理

对于Replicat进程处理DML操作过程中报错时,GoldenGate提供了一个参数用来控制如何处理Replicat进程的报错。这就是本节内容要介绍的reperror参数。这个参数能控制大部分的GoldenGate错误处理的手段。

如某案例的Replicat进程参数如图9-1所示。

 

9-1

1.2.1    reperror处理类型与含义

ReperrorGoldenGate11版本中共提供了7类处理错误方式分别如下。

1abendReplicat遇到不能处理的记录时,回滚事务,然后停止处理,Replicat进程状态转为abend

2discard:将不能处理记录的错误信息放到discard文件而Replicat进程继续处理下面的记录

3exception:将错误按照预先定义好的方式处理

4ignore:将不能处理的记录忽略掉,然后继续处理下面的记录

5retryop [maxretries ]:遇到不能处理的记录时,重试n

6transabort [,maxretries ][, delay[c]sesc];终止事务处理,将rba号指到该事务的开头,也可以指定重试几次

7reset:清除掉所有的reperror规则,然后将reperror的规则默认为abend

Replicat进程的参数中,可以将任意一个处理类型置为默认,如reperror、default、abend

通常,为了保证数据的一致性,都将reperror的默认规则设置为abend

1.2.2    复制进程常见数据库错误类型与处理方法

在实际的GoldenGate系统中,很大一部分Replicat错误信息都类似于ORA开头的数据库错误(这里以Oracle数据库为例)。虽然,通常对于ORA错误,需要手动查找数据库的原因,但可以用reperror处理一些预知的错误类型,然后再在数据库层面找到错误的原因,手动排除,而不至于导致该进程处理其他正常的表而abend掉。

例如:可以忽略掉重复数据的插入而其类型的报错则abend

示例9-11

 

Reperror (default, abend)

Reperror (-1, ignore)

 

当然,也可以只针对某张表的忽略掉重复数据的插入而abend掉其类型的报错。

示例9-12

 

REPERROR (-1, IGNORE)

MAP sales.product, TARGET sales.product;

REPERROR RESET

MAP sales.account, TARGET sales.account;

 

最常见的错误为ORA-1403。

1403错误是指记录无法投递到目标库,纯属数据错误,要通过查看错误信息和discard文件,到两端库寻找相应记录,结合logdump分析队列中的实际数据,再分析出问题原因。可能存在的原因有:两端表结构不一致;附加日志错误;初始化方法错误导致不一致;目标端级联删除、trigger没有被禁止;目标端存在Oraclejob或者操作系统任务修改数据。

处理方法:

“ 重新初始化该表

“ 手工修复该条数据

“ 修改reperror参数为discardignore模式,忽略掉错误(在使用这个参数之前用户应该非常清楚自己在做什么,因为它会导致两端数据不一致)。

1.3  Ddlerror处理DDL复制错误

GoldenGate打开了DDL复制时,当DDL复制报错时,则需要用到此处的ddlerror参数预处理一些常见的报错信息。Ddlerror对于抽取复制进程均有效,默认为abend

Ddlerror参数的语法为:

示例9-13

 

DDLERROR

{ | DEFAULT} {}

[RETRYOP MAXRETRIES [RETRYDELAY ]]

{INCLUDE | EXCLUDE }

[IGNOREMISSINGTABLES | ABENDONMISSINGTABLES]

 

如当DDL复制报ORA-1430错误,传递了重复的alter语句导致,则可以用ddlerror (1430, discard)将错误信息扔到discard文件里。

的错误处理与reperror类似。

1.4  Discardfile记录进程错误信息

discardfile 这个参数来生成一个discard文件,将GoldenGate不能处理的信息记录到这个文件。这样对GoldenGatetroubleshooting非常的有帮助。

如源端表结构有变化,默认传递过来的数据应用时Replicat进程则报错,此时则可以通过discard文件看到报错信息位哪个表做了怎样的alter操作,再在目标端也将表结构改变一些,错误即可排除。

Discard文件默认在GoldenGate安装目录的dirrpt子文件夹,如图9-2所示

 

9-2

Discard文件记录的报错信息如图9-3所示

 

9-3

1.5  GoldenGate常见错误分析

1解决GoldenGate错误的一个关键点就是通过错误分析工具(包括report文件,ggserr.log discard文件logdump工具,GGSCI命令行)确定错误的根源是哪个组件引起的

“ 系统或者网络?

“ 数据库报错或者应用报错?

“ GoldenGate安装报错?

“ GoldenGate的某个进程报错?

“ GoldenGate的参数配置文件报错?

“ SQL语句或者存储过程报错?

然后再确定错误的原因,逐个排查。

2GoldenGate遇到错误时,则可以借助日志、report文件找到错误原因,一步一步来排查。一般的错误信息GoldenGate都会提示有相应的解决办法。

如下介绍一个错误案例:

通过命令:

示例9-14

 

GGSCI>view ggsevt

看到的报错信息如图9-4所示。

 

9-4

通过view report dpeyb 看到的也是类似的信息。

再来观察容灾端复制进程的报错信息为:

示例9-15

 

2011-03-02 12:03:37  ERROR   OGG-01028  Incompatible record in ./dirdat/ yb018262, rba 72955479 (getting header).

 

通过logdump进入到该trail文件查看,如图9-5所示。

 

9-5

通过分析推敲等,确认是因为trail文件有一条记录已损坏,导致投递进程不识别,不能自动翻滚到下一个trail文件,而复制进程也不能自动应用到下一个trail文件,Pump程通过手动etrollover,复制进程通过alter手动指定到下一个trail文件应用,故障即可排除。

1.5.1  AIX GGSCI无法运行

错误信息:

示例9-16

 

Cannot load ICU resource bundle 'ggMessage', error code 2 - No such file or directory

Cannot load ICU resource bundle 'ggMessage', error code 2 - No such file or directory

IOT/Abort trap (core dumped)

或者GGSCI可以启动,但是运行任何命令都报上面的错误。

处理方法:通常使用已有的mount点安装GoldenGate,在mount时使用了并发CIO参数。新建文件系统,重新mount,作为GoldenGate安装目录。

错误信息:

示例9-17

 

$ ./ggsci

exec(): 0509-036 Cannot load program GGSCI because of the following errors:

         0509-130 Symbol resolution failed for GGSCI because:

         0509-136   Symbol _GetCatName__FiPCc (number 158) is not exported          from dependent module /usr/lib/libC.a[ansi_64.o].

         0509-136   Symbol _Getnumpunct__FPCc (number 162) is not exported          from dependent module /usr/lib/libC.a[ansi_64.o].

         0509-136   Symbol __ct__Q2_3std8_LocinfoFPCci (number 183) is not          exported from dependent module /usr/lib/libC.a[ansi_64.o].

         0509-192 Examine .loader section symbols with the 'dump -Tv' command.

 

原因是XLC6.0版本,升级XLC版本到10.1以上,问题即可解决

1.5.2  HP-UX GGSCI无法运行

错误信息:core dumped

该问题只在HP-UX11.31上发现。

处理方法:环境变量没有设置正确。

1.5.3  队列文件保存天数

mgr.prm中,添加:

示例9-29

 

PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3

 

修改之后,必须重启manager即可看到队列文件占用的空间被按照上面指定的规则释放。

如果存储空间不够,可以将minkeepdays修改为MINKEEPHOURS

如果源端存储空间不足,最好修改最少保留的时间。

9.5.12 复制进程拆分及指定队列文件及RBA

拆分前通过INFO XXX获取队列文件信息及RBA号,返回样例如下:

示例9-30

 

GGSCI> INFO REPYXA

REPLICAT   REPYXA    Last Started 2011-01-08 19:48   Status RUNNING

Checkpoint Lag       00:00:00 (updated 00:01:42 ago)

Log Read Checkpoint  File ./dirdat/p1000556 First Record  RBA 59193235

 

在将Replicat进程拆分后,指定从拆分前的队列文件及RBA号码开始复制:

示例9-31

 

ALTER REPLICAT xxx EXTSEQNO nnn, EXTRBA mmm

 

以上面的为例:

示例9-32

 

ALTER REPLICAT REPYXA 556, EXTRBA 59193235

1.5.4  BOUNDED RECOVERY

错误信息:

示例9-33

 

BOUNDED RECOVERY: reset to initial or altered checkpoint.

 

数据库问题,不能读取第2个节点的archivelog文件

1.5.5  排除不复制的表

在参数文件中增加:

示例9-34

 

TABLEEXCLUDE schema.table_name

1.5.6  从指定时间重新抓取

重新抓取数据前提:归档文件没有删除

示例9-35

 

ALTER EXTRACT xxx, TRANLOG, BEGIN 2010-12-31 08:00

 

时间格式:yyyy-mm-dd [hh:mi:[ss[.cccccc]]]

如果是新建:

示例9-36

 

ADD EXTRACT xxx, TRANLOG, BEGIN 2010-12-31 08:00

1.5.7  进程无法停止

通常情况是在处理大交易,尤其在有超过2小时以上的大交易,建议等待进程处理完毕。

处理方法:如果必须停止进程,可以强制杀死进程

示例9-37

 

send xxx forcestop

1.5.8  CLOB处理

如果包含CLOB字段,在Extract参数文件中必须添加:

示例9-38

 

TRANLOGOPTIONS CONVERTUCS2CLOBS

1.5.9  DB2不能使用checkpoint table

处理方法:在增加Replicat进程时使用nodbcheckpoint参数

示例9-39

 

add replicat xxx, exttrail /GoldenGate/dirdat/rb, nodbcheckpoint

1.6  ogg-错误

1.6.1  OGG-00446  

1.6.1.1  OGG-00446 Could not find archived log for sequence 53586 thread 1 under alternative destinations.

错误信息:

OGG-00446  Could not find archived log for sequence 53586 thread 1 under alternative destinations. SQL


TRANLOGOPTIONS ASMUSER @,

ASMPASSWORD

 

 

 

1.6.1.3  OGG-00446 Missing filename opening checkpoint file.

 

ERROR   OGG-00446  Missing filename opening checkpoint file.

进程RSJQZ011进程abended,如下:

ERROR   OGG-00446  Missing filename opening checkpoint file.

检查RSJQZ011配置情况:

GGSCI (oraserver.localdomain) 19> view param RSJQZ011

Sourcedefs  /goldengate/dirdef/DESJQZ001.def

---handlecollisions

batchsql

SETENV ( NLS_LANG = ".ZHS16GBK")

OBEY /goldengate/dirprm/pwd.obey

Discardfile /goldengate/dirrpt/RSJZX001.dsc, append, megabytes 100

map DB_DJGL.A, target DB_NBGY.A;

发现Replicat RSJQZ011一行被删除了,所以导致报错。

加上Replicat RSJQZ011后进程启动正常。

 

 

1.6.2  OGG-01154  Oracle GoldenGate Delivery for Oracle, repn.prm

 错误信息:

OGG-01154  Oracle GoldenGate Delivery for Oracle, repn.prm:  SQL error 1691 mapping DATA_USER.DMH_WJXXB to DATA_USER.DMH_WJXXB OCI Error ORA-01691: unable to extend lob segment DATA_USER.SYS_LOB0000083691C00014$$ by 16384 in tablespace DATA_USER_LOB_U128M_1 (status = 1691), SQL .

处理办法:

数据库中该表空间已满,需要对该表空间进行扩容。

 

1.6.2.1  OGG-01154

错误信息:2011-03-29 15:53:57  WARNING OGG-01154  Oracle GoldenGate Delivery for Oracle, repya.prm:  SQL error 14402 mapping EPMA.D_METER to E

PMA.D_METER OCI Error ORA-14402: updating partition key column would cause a partition change (status = 14402), SQL .

导致原因:源端更新了分区列,但目标端没有打开行移动,导致更新时报错;

处理方法:SQLPLUS>alter table SCHEMA.TABLENAME enable row movement;

 

1.6.3  OGG-00664

1.6.3.1  OGG-00664  OCI Error during OCIServerAttach (status = 12541-ORA-12541: TNS:no listener).

错误信息:

OGG-00664  OCI Error during OCIServerAttach (status = 12541-ORA-12541: TNS:no listener).

处理方法:

启动数据库的监听器。

 

1.6.3.2  OGG-00664  OCI Error during OCIServerAttach (status = 12545-Error while trying to retrieve text for error ORA-12545).

 

2015-06-09 22:31:11  ERROR   OGG-00664  OCI Error during OCIServerAttach (status = 12545-Error while trying to retrieve text for error ORA-12545).

 

2015-06-09 22:31:16  ERROR   OGG-01668  PROCESS ABENDING.

 

ORACLE_HOME设置有问题。

解决办法:setenv (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)

 

1.6.4  OGG-00665

1.6.4.1  OGG-00665 OCI Error describe for query (status = 3135-ORA-03135: connection lost contact

错误信息:

OGG-00665  OCI Error describe for query (status = 3135-ORA-03135: connection lost contact

Process ID: 8859

Session ID: 131 Serial number: 31), SQL.

 

2015-06-08 12:12:43  ERROR   OGG-00665  OCI Error describe for query (status = 942-ORA-00942: table or view does not exist), SQL