OGG GoldenGate 故障诊断手册Troubleshooting handbook

 

本文地址:http://www.askmaclean.com/archives/ogg-goldengate-%E6%95%85%E9%9A%9C%E8%AF%8A%E6%96%AD%E6%89%8B%E5%86%8Ctroubleshooting-handbook.html

OGG GoldenGate 故障诊断手册Troubleshooting handbook

1       前期准备

前期准备可以避免很多不必要的错误,因此在实施之前可以尽量完成以下准备工作。

1.1     操作系统环境变量

HP-UX:export LD_LIBRARY_PATH=/ggs/11.1:$LD_LIBRARY_PATH

AIX:export LIBPATH=/ggs/11.1:$LIBPATH

这里要注意,将GoldenGate安装目录放在LD_LIBRARY_PATH/LIBPATH环境变量最前面

1.2     GoldenGate运行操作系统用户

建议使用oracle用户运行GoldenGate,oracle用户已将oracle相关环境变量设置好,包括lib相关的环境变量。如果使用独立的GoldenGate用户,可以将oracle用户的环境变量复制到profile文件中,额外添加lib包相关的内容。

1.3     操作系统资源使用限制

使用操作系统命令:ulimit –a

查看相应的系统资源使用限制,通过修改/etc/security/limits文件,建议都设置unlimitied。如果不能全部设置为unlimited,必须将以下参数设置为unlimited:

max memory size       (kbytes, -m) unlimited

file size               (blocks, -f) unlimited

data seg size           (kbytes, -d) unlimited

cpu time              (seconds, -t) unlimited

stack size              (kbytes, -s) unlimited

很多情况下出现问题,和stack没有设置成unlimited有关。

 

1.4     源数据库必须启动归档模式并开启附加日志

1.4.1 Oracle数据库

Oracle数据库开启归档模式,数据库需要重启,步骤如下:

SQL> SELECT LOG_MODE FROM V$DATABASE;

SQL> SHUTDOWN IMMEDIATE

SQL> STARTUP MOUNT;

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST=’/U01/archive’;

SQL> ALTER DATABASE ARCHIVELOG;

SQL> ALTER DATABASE OPEN;

SQL> ARCHIVE LOG LIST;

SQL> ALTER SYSTEM SWITCH LOGFILE;

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;

 

1.4.2 DB2数据库

无论DB2 8还是DB2 9系列都需要重启数据库

DB2 8系列:必须设置USEREXIT和LOGRETAIN参数

db2 update db cfg for <database name> using USEREXIT ON

db2 update db cfg for <database name> using LOGRETAIN ON

DB2 9系列:可以不使用USEREXIT和LOGRETAIN参数,而是使用LOGARCHMETH1和LOGARCHMETH2参数开启归档模式,但是LOGRETAIN仍需设置为ON

1.5     AIX XL C版本

AIX 5.3 需要XL C/C++ Runtime v10.1以上以及libpthreads version 5.3.0.51或以上,libpthreads属于基础包,基本都会满足。

AIX 5.2 需要XL C/C++ Runtime v9.0以上以及libpthreads version 5.2.0.106或以上,libpthreads属于基础包,基本都会满足。

很多情况XL C版本为9.0以下,此时必须升级XL C版本(askmaclean.com)

1.6     HP-UX aCC版本

On HP-UX 11.23 IA64, Oracle GoldenGate requires aCC: HP aC++/ANSI C B3910B

A.06.05 or newer aC++ libraries. PHSS_34041 or newer is required.

 

1.7     Windows C++版本

这里要注意,GoldenGate的版本是和数据库和操作系统相关的,如果是64位的OS,结果安装了32位的数据库,必须使用32位的GoldenGate和32位的C++ 2005 sp1 redistributable package。

32位下载地址:

http://www.microsoft.com/downloadS/details.aspx?displaylang=zh-cn&FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647

64位下载地址:

http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=eb4ebe2d-33c0-4a47-9dd4-b9a6d7bd44da

1.8     GoldenGate安装目录

OGG安装目录建议在存储阵列上,但是在mount时需注意,不能使用并发参数,例如:在AIX下, 不能使用CIO参数。如果使用已有的mount点,并且使用并发参数,必须新建文件系统,重新mount,作为GoldenGate安装目录。

1.9     RAC相关设置

必须保证GoldenGate可以访问到RAC环境任何一个节点的归档日志,可以采用并行文件系统或NFS,一般采用NFS。

在extract参数文件中指定参数:

TRANLOGOPTIONS altarchivelogdest primary instance ins1 /archive01, altarchivelogdest  instance  ins2 /archive02

1.10        端口设置

在mgr.prm中设置动态端口范围

dynamicportlist 7840-7914

很多没有设置为这个范围,导致容灾中心Director不能观察到网省端的运行状态。

1.11        压缩传输设置

在datapump参数文件中指定压缩参数,否则将占用较大的网络带宽,导致传输时间过长。

RMTHOST 10.100.xx.xx, MGRPORT 7839, compress

1.12        待复制表名设置

在参数文件中建议使用具体要复制的表名称,例如:schema.table_name的方式,便于后期维护。

1.13        队列文件保存期限设置

在mgr.prm文件中进行设置:

PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3

如果空间不够,可将minkeepdays修改为:MINKEEPHOURS。

如果空间仍然紧张,仍要求立即释放空间,可修改为:MINKEEPFILES,将值设置为1,即只保留一个处理过的队列文件。

1.14        抽取及复制分组

针对大的应用系统,需对要复制的表进行分组,例如:营销系统,至少要分6-8个Extract、datapump和replicat进程。任何分组需要和应用系统开发商进行协调。

1.15        AIX使用裸设备

在extract, datapump,replicat参数文件中必须添加:

TRANLOGOPTIONS  RAWDEVICEOFFSET  0

1.16        同步表清单

只同步和应用系统相关的schema下面的表,很多网省的参数文件,直接把所有用户都列在里面,其中很多是数据库本身自己使用的用户,例如:

‘SYS’, ‘SYSTEM’, ‘DBSNMP’,’SYSMAN’,’OUTLN’,’MDSYS’,’ORDSYS’,’EXFSYS’,’DMSYS’,’WMSYS’, ‘CTXSYS’,’ANONYMOUS’,’XDB’,’ORDPLUGINS’,’OLAPSYS’

1.17        临时表排除

很多网省在参数文件中使用shcema.*的方式,这样有很多临时表也会进行复制,经于应用系统开发商确认,TEMP和TMP开头的表根本不需要复制,因此在参数文件中直接排除这些临时表。

extract:

TABLEEXCLUDE SCHEMA.TEMP*

TABLEEXCLUDE SCHEMA.TMP*

replicat:

MAPEXCLUDE SCHEMA.xxx

1.18        UNIX GGSCI需要lib包验证

在GoldenGate安装目录运行:

ldd ggsci

验证所需要的lib包,必须保证全部可以找到。

例如:下面的提示有lib包没有找到

linux-gate.so.1 =>  (0x00c10000)

libdl.so.2 => /lib/libdl.so.2 (0x006d2000)

libicui18n.so.38 => /u01/app/goldengate/libicui18n.so.38 (0x00110000)

libicuuc.so.38 => /u01/app/goldengate/libicuuc.so.38 (0x00cd6000)

libicudata.so.38 => /u01/app/goldengate/libicudata.so.38 (0xb74c3000)

libpthread.so.0 => /lib/libpthread.so.0 (0x006d8000)

libxerces-c.so.28 => /u01/app/goldengate/libxerces-c.so.28 (0x006f0000)

libnnz10.so => not found

libclntsh.so.10.1 => not found

libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x054b9000)

libm.so.6 => /lib/libm.so.6 (0x006a9000)

libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00271000)

libc.so.6 => /lib/libc.so.6 (0x00561000)

/lib/ld-linux.so.2 (0x00543000)

设置相关环境变量或安装缺失的操作系统补丁,确认全部lib包可以找到,如下所示:

$ ldd ggsci

linux-gate.so.1 =>  (0x00af3000)

libdl.so.2 => /lib/libdl.so.2 (0x006d2000)

libicui18n.so.38 => /u01/app/goldengate/libicui18n.so.38 (0x00cb3000)

libicuuc.so.38 => /u01/app/goldengate/libicuuc.so.38 (0x0090e000)

libicudata.so.38 => /u01/app/goldengate/libicudata.so.38 (0xb74d1000)

libpthread.so.0 => /lib/libpthread.so.0 (0x006d8000)

libxerces-c.so.28 => /u01/app/goldengate/libxerces-c.so.28 (0x00110000)

libnnz10.so => /u01/app/oracle/product/10.2.0/db_1/lib/libnnz10.so (0x006f0000)

libclntsh.so.10.1 => /u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1 (0x00e14000)

libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x054b9000)

libm.so.6 => /lib/libm.so.6 (0x006a9000)

libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x004bd000)

libc.so.6 => /lib/libc.so.6 (0x00561000)

/lib/ld-linux.so.2 (0x00543000)

libnsl.so.1 => /lib/libnsl.so.1 (0x00a54000)(askmaclean.com)

2       常见错误处理

2.1     AIX GGSCI无法运行

错误信息:

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安装目录。

 

错误信息:

$ ./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.

原因是XLC是6.0版本,升级XLC版本到10.1以上,问题解决

2.2     HP-UX GGSCI无法运行

错误信息:core dumped

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

处理方法:环境变量设置问题,参见“1.1 操作系统环境变量”小节

 

错误信息:aCC runtime: Use of “-mt” must be consistent during both compilation and linking.

IOT core dumped

该问题在HP-UX 11.23上发现,原因是没有C++运行环境

On HP-UX 11.23 IA64, Oracle GoldenGate requires aCC: HP aC++/ANSI C B3910B

A.06.05 or newer aC++ libraries. PHSS_34041 or newer is required.

处理方法:安装补丁包

2.3     OGG-01296

WARNING OGG-01154  Oracle GoldenGate Delivery for Oracle, repyxb.prm:  SQL error 1403 mapping SGPM.P_SMS_SEND to SGPM.P_SMS_SEND.

WARNING OGG-01003  Oracle GoldenGate Delivery for Oracle, repyxb.prm:  Repositioning to rba 2509817 in seqno 1.

ERROR   OGG-01296  Oracle GoldenGate Delivery for Oracle, repyxb.prm:  Error mapping from SGPM.P_SMS_SEND to SGPM.P_SMS_SEND.

ERROR   OGG-01668  Oracle GoldenGate Delivery for Oracle, repyxb.prm:  PROCESS ABENDING.

由于源端进行了表结构更改,没有通知目标端,导致此错误

处理方法:

  • 先确认两端表结构是否一致
  • 在源端查看附加日志是否enable

GGSCI>INFO TRANDATA schema.table_name

返回应该是enable,如果不是,重新添加

GGSCI>ADD TRANDATA schema.table_name

  • 目标端数据库:触发器,约束,job等是否已经禁止
  • 使用logdump查看实际数据,分析原因

2.4     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 <UPDATE “EPMA”.”D_METER” SET “PR_ORG” = :a1,”BELONG_DEPT” = :a2 WHERE “METER_ID” = :b0>.

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

2.5     OGG-01088

错误信息:

ERROR   OGG-01088  Oracle GoldenGate Delivery for Oracle, pms_rep1.prm:  malloc 2097152 bytes failed.

ERROR   OGG-01668  Oracle GoldenGate Delivery for Oracle, pms_rep1.prm:  PROCESS ABENDING.

处理方法:

  • ulimit -a,验证操作系统对用户是否所有资源都是无限制,参见3小节。
  • 将进程进行拆分,拆分为多个进程。
  • 从oracle.com下载最新的补丁包,升级GoldenGate。

2.6     OGG-01224

ERROR OGG-01224 Oracle GoldenGate Manager for Oracle, mgr.prm: No buffer space available

ERROR OGG-01224  Oracle GoldenGate Capture for Oracle, dpema.prm:  TCP/IP error 9 (Bad fil e number).

修改mgr.prm,扩大动态端口范围,dynamicportlist 7840-7914

2.7     OGG-01031

ERROR   OGG-01031  There is a problem in network communication, a remote file problem, encryption keys for target and source do not match (if using ENCRYPT) or an unknown error. (Reply received is Expected 4 bytes, but got 0 bytes, in trail ./dirdat/t1000026, seqno 26, reading record trailer token at RBA 103637218).

2011-01-06 11:04:16  ERROR   OGG-01668  PROCESS ABENDING.

处理方法:

可能是网络出现过故障,OGG源端的Data Pump进程与目标断了联系,目标端mgr为其启动的server进程一直还在运行,下次data pump重启时目标mgr会试图生成另外一个server进程,这样两个进程会争同一个队列文件。处理方法是停掉源端的所有data pump,使用ps –ef|grep server(或OGG安装目录)看看是不是还有OGG的server进程在跑,如果有,杀死它(一定要确认源端data pump全停掉,并且杀的是server进程,不要杀其它extract/replicat/mgr等),重启源端data pump即可。

 

可能是目标端的trail file出问题了,前滚重新生成一个新的队列文件

SEND EXTRACT xxx ETROLLOVER

或者:alter extract xxx etrollover

xxx为datapump的名称

2.8     OGG-01072

ERROR OGG-01072 LOBROW_get_next_chunk(LOBROW_row_t *, BOOL, BOOL, BOOL, LOBROW_chunk_header_t *, char *, size_t, BOOL, *) Buffer overflow, needed:132, alloc 2.

处理方法:

  • 如果版本为1.1.0.1 Build 078版本,升级到最新的补丁包
  • 使用ulimit –a查看资源使用限制,调整资源为unlimited
  • extract: DBOPTIONS LOBBUFSIZE <bytes>
  • replicat: DBOPTIONS LOBWRITESIZE 1MB

2.9     OGG-01476

ERROR   OGG-01476  The previous run abended due to an out of order transaction. Issue ALTER ETROLLOVER to advance the output trail sequence past the current trail sequence number, then restart. Then, use ALTER EXTSEQNO on the subsequent pump EXTRACT, or REPLICAT, process group to start reading from the new trail file created by ALTER ETROLLOVER; the downstream process will not automatically switch to the new trail file.

在初始化的时候,由于容灾端没有准备就绪,在生产端来回进行了很多次的操作,导致生产端抽取混乱,此时在进行RMAN之前,重新启动抽取,忽略调之前的混乱信息。

处理方法:

RAC环境,查看时钟是否同步

参数文件增加:

THREADOPTIONS MAXCOMMITPROPAGATIONDELAY 7000 IOLATENCY 7000

7000可以进行大小调整

如果还有问题:

alter extract xxx, etrollover

## 启动data pump进程后,datapump会报错,错误信息大致是进程当前的队列文件(假设是65)已经读完,但是找不到文件结尾标志,同时又发现新的队列文件(假设是66)已经生成。这个时候应该手工将datapump滚动到这个新的队列文件头(66)

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

stop [pump_name]

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

start [pump_name]

注:用实际的datapump进程名代替 [pump_name],用新的队列文件号代替#####

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

 

##启动Replicat,观察其是否能够读取新传输过来的队列

 

##如Replicat无法自动滚动到下一个队列,需要通过命令手工滚动

stop [replicat_name]

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

start [replicat_name]

注:用实际的replicat进程名代替 [replicat_name],用新的队列文件号代替#####

 

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

 

2.10        OGG-00850

ERROR   OGG-00850  Oracle GoldenGate Capture for DB2, extxa.prm:  Database instance XP1 has both USEREXIT and LOGRETAIN set to off.

ERROR   OGG-01668  Oracle GoldenGate Capture for DB2, extxa.prm:  PROCESS ABENDING.

处理方法:

如果是DB2 8.1/8.2,必须将USEREXIT和LOGRETAIN设置为ON。

如果是DB2 9.5,已经使用LOGARCHMETH1和LOGARCHMETH2代替以上两个参数,通常LOGARCHMETH1为DISK,LOGARCHMETH2为TSM,采用这两个参数开启归档模式。在DB2 9.5中,USEREXIT可以设置为OFF,但是LOGRETAIN仍需设置为ON。

因此LOGARCHMETH1需设置为LOGRETAIN,LOGARCHMETH2设置为OFF

经过现场测试:LOGARCHMETH1=TSM and LOGARCHMETH2=OFF 可以正常工作

2.11        OGG-01416

ERROR   OGG-01416  Oracle GoldenGate Capture for Oracle, dpeya.prm:  File ./dirdat/ya001542, with format RELEASE 9.0/9.5, does not match current format specification of RELEASE 10.4/11.1. Modify the parameter file to specify format RELEASE 9.0/9.5 or issue ETROLLOVER prior to restart.

2011-03-14 15:04:12  ERROR   OGG-01668  Oracle GoldenGate Capture for Oracle, dpeya.prm:  PROCESS ABENDING.

处理方法:

ALTER EXTRACT xxx etrollover

后续步骤参照OGG-01476进行处理。

## 启动data pump进程后,datapump会报错,错误信息大致是进程当前的队列文件(假设是65)已经读完,但是找不到文件结尾标志,同时又发现新的队列文件(假设是66)已经生成。这个时候应该手工将datapump滚动到这个新的队列文件头(66)

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

stop [pump_name]

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

start [pump_name]

注:用实际的datapump进程名代替 [pump_name],用新的队列文件号代替#####

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

 

##启动Replicat,观察其是否能够读取新传输过来的队列

 

##如Replicat无法自动滚动到下一个队列,需要通过命令手工滚动

stop [replicat_name]

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

start [replicat_name]

注:用实际的replicat进程名代替 [replicat_name],用新的队列文件号代替#####

 

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

 

 

2.12        OGG-01027(长事务)

在extract中添加:

WARNLONGTRANS 2h,CHECKINTERVAL 3m

ggserr.log文件中会记录大事务警告

WARNING OGG-01027  Long Running Transaction: XID 82.4.242063, Items 0, Extract YX_EXT1, Redo Thread 1, SCN 2379.2132775890 (10219859973074), Redo Seq #5688, Redo RBA 195997712.

GGSCI> send extract xxx, showtrans [thread n] [count n]

thread n是可选的,表示只查看其中一个节点上的未提交交易;

count n也是可选的,表示只显示n条记录。

例如:查看xxx进程中节点1上最长的10个交易,可以通过下列命令:

GGSCI> send extract extsz , showtrans thread 1 count 10

记录XID,通过DBA查找具体的长交易执行的内容

GGSCI> SEND EXTRACT xxx, SKIPTRANS <82.4.242063> THREAD <2> //跳过交易

GGSCI>SEND EXTRACT xxx, FORCETRANS <82.4.242063> THREAD <1> //强制认为该交易已经提交

使用这些命令只会让GoldenGate进程跳过或者认为该交易已经提交,但并不改变数据库中的交易,他们依旧存在于数据库中。因此,强烈建议使用数据库中提交或者回滚交易而不是使用GoldenGate处理。

查找长事务对应的SQL语句:

XID由三部分组成:XIDUSN.XIDSLOT.XIDSQN

通过以下语句查找对应的SQL语句

select /*+ rule*/b.USERNAME,b.SCHEMANAME,b.OSUSER,b.MACHINE,c.SQL_TEXT

from v$transaction a, v$session b, v$sql c
where a.XIDUSN = 5
and a.XIDSLOT = 42
and a.XIDSQN = 1920
and a.ADDR = b.TADDR
and b.SQL_ADDRESS = c.ADDRESS
and b.SQL_HASH_VALUE = c.HASH_VALUE;

2.13        队列文件保存天数

在mgr.prm中,添加:

PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3

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

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

很多网省源端存储空间不足,这样修改为最小保留的小时数,缓解存储空间不足。

如果空间仍然紧张,仍要求立即释放空间,可修改为:MINKEEPFILES,将值设置为1,即只保留一个处理过的队列文件(不建议使用)。

如果存储空间充裕,建议最少保留3天的队列文件。

2.14        队列文件不自动清除

首先确认manager参数文件mgr.prm中是否添加了定期清除参数:

PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3

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

如果还是没有删除,通过:GGSCI>INFO XXX, SHOWCH,查看是否存在多个Write Checkpoint,一个为相对路径,一个为绝对路径

原因如下:

源端:

在增加extract和datapump时,在GGSCI命令行指定的路径和参数文件中的不一致,如果在命令行使用绝对路径,在参数文件中必须使用绝对路径。如果使用了相对路径,则统一采用相对路径。

目标端:

在GGSCI增加datapump时,RMTTRAIL如果使用了相对路径,在增加replicat时必须使用相对路径。

处理方法:

GGSCI>INFO XXX, SHOWCH

GGSCI>INFO XXX

记录相关信息,删除不正确路径的exttrail

通过alter命令设置为上面INFO信息记录的检查点

GGSCI>alter xxx extseqno INFO看到的序列号, extrba INFO看到的RBA号码, [thread n]

GGSCI>start xxx

举例:

GGSCI > info exttrail dpecw

 

Extract Trail: /ggsfs/dirdat/cw

Extract: DPECW

Seqno: 0

RBA: 0

File Size: 50M

Extract Trail: ./dirdat/cw

Extract: DPECW

Seqno: 365

RBA: 8497768

File Size: 10M

可以看到有两个路径,一个是相对路径./dirdat/cw,一个是绝对路径:/ggsfs/dirdat/cw

GGSCI > stop dpecw

Sending STOP request to EXTRACT DPECW …

Request processed.

 

GGSCI > status dpecw

EXTRACT DPECW: STOPPED

 

GGSCI > info dpecw

EXTRACT    DPECW     Last Started 2011-03-23 11:03   Status STOPPED

Checkpoint Lag       00:00:00 (updated 00:00:09 ago)

Log Read Checkpoint  File /ggsfs/dirdat/cw000365

2011-04-07 14:10:01.000000  RBA 4558731

记录seqno:365和rba:4558731

GGSCI > stop extcw

Sending STOP request to EXTRACT EXTCW …

Request processed.

GGSCI > info exttrail cw*

Extract Trail: /ggsfs/dirdat/cw

Extract: DPECW

Seqno: 0

RBA: 0

File Size: 50M

Extract Trail: ./dirdat/cw

Extract: DPECW

Seqno: 365

RBA: 8497768

File Size: 10M

 

Extract Trail: /ggsfs/dirdat/cw

Extract: EXTCW

Seqno: 0

RBA: 0

File Size: 50M

Extract Trail: ./dirdat/cw

Extract: EXTCW

Seqno: 365

RBA: 4657905

File Size: 10M

可以看到extcw和dpecw都存在问题

删除多余的exttrail

GGSCI > delete exttrail /ggsfs/dirdat/cw

Deleting extract trail /ggsfs/dirdat/cw for extract DPECW

Deleting extract trail /ggsfs/dirdat/cw for extract EXTCW

GGSCI > info exttrail *

Extract Trail: ./dirdat/cw

Extract: DPECW

Seqno: 365

RBA: 8497768

File Size: 10M

Extract Trail: ./dirdat/cw

Extract: EXTCW

Seqno: 365

RBA: 4657905

File Size: 10M

确认已经正常

GGSCI > info extcw

EXTRACT    EXTCW     Last Started 2011-04-07 14:16   Status RUNNING

Checkpoint Lag       00:00:58 (updated 00:00:07 ago)

Log Read Checkpoint  Oracle Redo Logs

2011-04-07 14:15:30  Seqno 10726, RBA 151756800

确认和之前info extcw时的信息一致,启动extcw

GGSCI (ora5502) 18> start extcw

Sending START request to MANAGER …

EXTRACT EXTCW starting

GGSCI > info dpecw

 

EXTRACT    DPECW     Initialized   2011-03-23 11:03   Status STOPPED

Checkpoint Lag       00:00:00 (updated 00:02:19 ago)

Log Read Checkpoint  File /ggsfs/dirdat/cw000365

2011-04-07 14:10:01.000000  RBA 4558731

 

GGSCI > alter dpecw, exttrailsource ./dirdat/cw

EXTRACT altered.

 

GGSCI > info dpecw

 

EXTRACT    DPECW     Initialized   2011-04-07 14:17   Status STOPPED

Checkpoint Lag       00:00:00 (updated 00:00:03 ago)

Log Read Checkpoint  File ./dirdat/cw000000

First Record  RBA 0

 

GGSCI> alter dpecw, extseqno 365, extrba 4558731

EXTRACT altered.

 

GGSCI> info dpecw

 

EXTRACT    DPECW     Initialized   2011-04-07 14:17   Status STOPPED

Checkpoint Lag       00:00:00 (updated 00:00:03 ago)

Log Read Checkpoint  File ./dirdat/cw000365

First Record  RBA 4558731

 

 

GGSCI> start dpecw

Sending START request to MANAGER …

EXTRACT DPECW starting

GGSCI (ora5502) 31> info dpecw

EXTRACT    DPECW     Last Started 2011-04-07 14:18   Status RUNNING

Checkpoint Lag       00:00:00 (updated 00:00:29 ago)

Log Read Checkpoint  File ./dirdat/cw000365

First Record  RBA 4558731

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

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

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号码开始复制。

ALTER REPLICAT xxx EXTSEQNO nnn, EXTRBA mmm

以上面的为例:ALTER REPLICAT REPYXA 556, EXTRBA 59193235

2.16        BOUNDED RECOVERY

错误信息:BOUNDED RECOVERY: reset to initial or altered checkpoint.

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

2.17        排除不复制的表

在参数文件中增加:

TABLEEXCLUDE schema.table_name

2.18        从指定时间重新抓取

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

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

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

如果是新建:ADD EXTRACT xxx, TRANLOG, BEGIN 2010-12-31 08:00

2.19        进程无法停止

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

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

2.20        CLOB处理

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

TRANLOGOPTIONS CONVERTUCS2CLOBS

2.21        DB2不能使用checkpoint table

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

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

 

2.22        Datapump进程每次只传一个文件

错误信息:Datapump进程每次只传一个文件,然后就不工作了,状态是Running,重启之后,开始传下一个文件,需要不断重启才行

原因:AIX使用裸设备,没有添加参数。

处理方法:原来只是要求在extract中添加,在datapump中也需要添加

TRANLOGOPTIONS rawdeviceoffset 0

很多HP-UX出现不向目标端传输文件,是因为错误设置了上面的参数,将该参数从参数文件中删除即可。如果不是AIX使用裸设备,不要设置该参数。

2.23        Extract进程产生core文件

错误信息:extract运行一段时间,状态是running,但是不工作,在安装目录产生core文件,大约200M

原因:AIX没有使用裸设备,但是在参数文件中写了裸设备的参数

TRANLOGOPTIONS rawdeviceoffset 0

处理方法:将该参数删除

2.24        中文字节数问题

错误信息:2011-01-19 22:58:30  WARNING OGG-00869  OCI Error ORA-12899: value too large for column “SAPR3″.”ADRC”.”MC_STREET” (actual: 86, maximum: 75) (status = 12899), SQL <INSERT INTO “SAPR3″.”ADRC” (“CLIENT”,”ADDRNUMBER”,”DATE_FROM”,”NATION”,”DATE_TO”,”TITLE”,”NAME1″,”NA
ME2″,”NAME3″,”NAME4″,”NAME_TEXT”,”NAME_CO”,”CITY1″,”CITY2″,”CITY_CODE”,”CITYP_CODE”,”HOME_CITY”,”CIT>.

2011-01-19 22:58:30  WARNING OGG-01004  Aborted grouped transaction on ‘SAPR3.ADRC’, Database error 12899 (ORA-12899: value too large for column “SAPR3″.”ADRC”.”MC_STREET” (actual: 86, maximum: 75)).

2011-01-19 22:58:30  WARNING OGG-01003  Repositioning to rba 15479755 in seqno 11.

2011-01-19 22:58:30  WARNING OGG-01154  SQL error 12899 mapping SAPR3.ADRC to SAPR3.ADRC OCI Error ORA-12899: value too large for column “SAPR3″.”ADRC”.”MC_STREET” (actual: 86, maximum: 75) (status = 12899), SQL <INSERT INTO “SAPR3″.”ADRC” (“CLIENT”,”ADDRNUMBER”,”DATE_FROM”,”NATION”,”DATE_TO”,”TITLE”,”NAME1″,”NAME2″,”NAME3″,”NAME4″,”NAME_TEXT”,”NAME_CO”,”CITY1″,”CITY2″,”CITY_CODE”,”CITYP_CODE”,”HOME_CITY”,”CIT>.

2011-01-19 22:58:30  WARNING OGG-01003  Repositioning to rba 15479755 in seqno 11.

原因:中文字符问题,源端每个中文字符占2个字节,目标端每个占3个字节,

处理方法:SR 3-2456706611

首先确认参数文件中的NLS_LANG和数据库设置一致。

1 确认两个数据库的字符语义相同

参考SQL:

SQL> show parameter nls

NAME                                 TYPE        VALUE

———————————— ———– ——————————

nls_language                         string      AMERICAN

nls_length_semantics                 string      BYTE

nls_territory                        string      AMERICA

 

2 确认两端源和目标表的结构相同

参考SQL:

Select dbms_metadata.get_ddl(‘TABLE’,’#MyTable’,’My Owner’) from dual;

 

3 确认两端源和目标表的出错列的字符语义相同。

参考SQL:

select CHAR_USED,CHAR_LENGTH from dba_tab_columns where owner=’WHETC’ and table_name=’CBS_RUNNINGNUMBER_NOBU’ and column_name in (‘CPSBBZ’, ‘XCFX’);

4确认操作系统环境变量

确保两端操作系统级别,语言环境变量一致,包括:LANG,NLS_LANG等

3       中文表/中文字段处理

create table 测试表(

ID NUMBER,

姓名 VARCHAR2(30),

FLAG CHAR(1),

CONSTRAINT PK_TESTD PRIMARY KEY (ID) USING INDEX);

 

–源端创建MV LOG和MV:

drop materialized view log on “测试表”;

create materialized view log on “测试表” with primary key;

drop materialized view mv_cn_table;

create materialized view mv_cn_table refresh fast on commit as select id,姓名 as en_name,flag from “测试表”;

 

–目标端创建表及view

create or replace view v_cn_table as select id,姓名 as en_name,flag  from 测试表;

 

–这里NLS_LANG在GG中,抽取和复制必须设置为和目标字符集一致

SETENV (NLS_LANG = “AMERICAN_AMERICA.AL32UTF8”)

 

–Extract

extract ODISC

SETENV (NLS_LANG = “AMERICAN_AMERICA.AL32UTF8”)

userid custom_src, password custom_src

exttrail D:/goldengate/dirdat/ODISoc/oc

TABLE CUSTOM_SRC.MV_CN_TABLE;

–Datapump

extract ODIT1P

SETENV (NLS_LANG = “AMERICAN_AMERICA.AL32UTF8”)

PASSTHRU

rmthost localhost, mgrport 7909

rmttrail D:/gg_stg/dirdat/ODIT1op/op

TABLE CUSTOM_SRC.MV_CN_TABLE;

 

–Replicat

replicat ODIT1A1

SETENV (NLS_LANG = “AMERICAN_AMERICA.AL32UTF8”)

userid odi_staging,  password odi_staging

discardfile D:/gg_stg/dirrpt/ODIT1.dsc, purge

ASSUMETARGETDEFS

–这里必须指定此参数,否则update有问题

APPLYNOOPUPDATES

–这里必须指定KEYCOLS,否则删除和更新有问题

map CUSTOM_SRC.MV_CN_TABLE, TARGET ODI_STAGING.V_CN_TABLE, KEYCOLS (ID);

4       Extract拆分方法

  • 停止extract进程
  • 停止datapump、进程

GGSCI> INFO datapump_name

EXTRACT    DPEF      Last Started 2011-01-28 12:34   Status RUNNING

Checkpoint Lag       00:00:00 (updated 00:00:05 ago)

Log Read Checkpoint  File ./dirdat/ef000010

2011-01-28 12:47:45.000000  RBA 148645

直至RBA号不变化,才能停止

  • 停止replicat进程

GGSCI> INFO replicat_name

REPLICAT   RPEF      Last Started 2011-01-28 12:30   Status RUNNING

Checkpoint Lag       00:00:00 (updated 00:00:05 ago)

Log Read Checkpoint  File ./dirdat/ef000006

2011-01-28 12:47:45.000000  RBA 149258

直至RBA号不变化,才能停止

  • 记录extract检查点

Extract检查点包括:Recovery Checkpoint和Current Checkpoint

GGSCI> INFO extract_name, SHOWCH

EXTRACT    EXEE      Last Started 2011-01-28 09:58   Status STOPPED

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

Log Read Checkpoint  Oracle Redo Logs

2011-01-28 10:02:16  Seqno 26, RBA 7090688

Current Checkpoint Detail:

 

Read Checkpoint #1

 

Oracle Redo Log

 

Startup Checkpoint (starting position in the data source):

Sequence #: 26

RBA: 289296

Timestamp: 2011-01-28 09:27:31.000000

Redo File: C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG

 

Recovery Checkpoint (position of oldest unprocessed transaction in the data source):

    Sequence #: 26

    RBA: 7088144

Timestamp: 2011-01-28 10:02:16.000000

Redo File: C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG

 

Current Checkpoint (position of last record read in the data source):

    Sequence #: 26

    RBA: 7090688

Timestamp: 2011-01-28 10:02:16.000000

Redo File: C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG

 

Write Checkpoint #1

 

GGS Log Trail

 

Current Checkpoint (current write position):

Sequence #: 11

RBA: 31609

Timestamp: 2011-01-28 10:02:19.072000

Extract Trail: ./dirdat/ee

 

Header:

Version = 2

Record Source = A

Type = 4

# Input Checkpoints = 1

# Output Checkpoints = 1

 

File Information:

Block Size = 2048

Max Blocks = 100

Record Length = 2048

Current Offset = 0

 

Configuration:

Data Source = 3

Transaction Integrity = 1

Task Type = 0

 

Status:

Start Time = 2011-01-28 09:58:34

Last Update Time = 2011-01-28 10:02:19

Stop Status = G

Last Result = 400

 

  • 修改原有相应的参数文件,将拆分出的表从参数文件中删除
  • 增加新的extract,datapump和replicat

–source————————————————–

GGSCI (win2k364) 15> add ext exef, tranlog, begin now

EXTRACT added.

 

GGSCI (win2k364) 16> add exttrail ./dirdat/ef, ext exef, megabytes 50

EXTTRAIL added.

 

GGSCI (win2k364) 17> add ext dpef, exttrailsource ./dirdat/ef

EXTRACT added.

 

GGSCI (win2k364) 18> add rmttrail ./dirdat/ef, ext dpef, megabytes 50

RMTTRAIL added.

 

–target————————————————–

GGSCI (win2k364) 21> add rep rpef, exttrail ./dirdat/ef

REPLICAT added.

 

  • 修改新增extract进程的检查点

检查点为上面记录的两个检查点:current read checkpoint and recovery checkpoint

–修改current read checkpoint

GGSCI (win2k364) 30> alter exef extseqno 26, extrba 7090688 [, thread n]

EXTRACT altered.

–修改recovery checkpoint

GGSCI (win2k364) 4> alter exef ioextseqno 26, ioextrba 7088144 [, thread n]

 

2011-01-28 10:46:18  INFO    OGG-00989  WARNING: Unsupported operation. This might cause transactional inconsistency. Modifying iocheckpoint: ioseq = 26 iorba = 7088144.

Are you sure you want to continue? y

EXTRACT altered.

 

  • 确认所有参数文件正确,启动进程即可

5       Datapump和replicat拆分方法

下面以拆分replicat为例,datapump拆分方法相同。

  • 停止replicat进程
  • 查看检查点

GGSCI> INFO replicat_name, SHOWCH

REPLICAT   RPEF      Last Started 2011-01-28 12:30   Status RUNNING

Checkpoint Lag       00:00:00 (updated 00:00:03 ago)

Log Read Checkpoint  File ./dirdat/ef000006

2011-01-28 12:47:45.000000  RBA 149258

 

 

Current Checkpoint Detail:

 

Read Checkpoint #1

 

GGS Log Trail

 

Startup Checkpoint (starting position in the data source):

Sequence #: 4

RBA: 1845

Timestamp: 2011-01-28 11:32:10.556000

Extract Trail: ./dirdat/ef

 

Current Checkpoint (position of last record read in the data source):

    Sequence #: 6

    RBA: 149258

Timestamp: 2011-01-28 12:47:45.000000

Extract Trail: ./dirdat/ef

 

Header:

Version = 2

Record Source = A

Type = 1

# Input Checkpoints = 1

# Output Checkpoints = 0

 

File Information:

Block Size = 2048

Max Blocks = 100

Record Length = 2048

Current Offset = 0

 

Configuration:

Data Source = 0

Transaction Integrity = -1

Task Type = 0

 

Database Checkpoint:

Checkpoint table = GGS.GGSCHKPT

Key = 746337239 (0x2c7c33d7)

Create Time = 2011-01-28 10:20:18

 

Status:

Start Time = 2011-01-28 12:30:23

Last Update Time = 2011-01-28 13:25:34

Stop Status = A

Last Result = 400

  • 修改原有参数文件,将拆分出的表删除
  • 新增replicat,和拆分前的进程读取相同的队列文件
  • 修改检查点

GGSCI>alter replicat_new extseqno 6, extrba 149258

  • 确认所有参数文件无误,启动进程即可

 

6       Logdump使用指引

  • 在GGSCI中使用如下命令查看当前处理的队列文件和RBA号,例如:

GGSCI (br-jl-accs-db1) 3> info REPYXA

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

Checkpoint Lag       00:00:00 (updated 136:41:42 ago)

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

1、在GoldenGate安装目录执行logdump命令

2、打开要查看的队列文件

Logdump 1 >open ./dirdat/p1000556

Current LogTrail is ./dirdat/p1000556

Logdump 2 >ghdr on

Logdump 3 >detail on

Logdump 4 >detail data

Logdump 5 >usertoken on

Logdump 6 >pos 59193235 上面INFO命令看到的RBA号码

Logdump 7 >n

输入n显示当前处理的表及相关操作

再次输入n,显示下一条记录,如果要跳过当前记录,方法如下:

GGSCI>alter REPYXA extseqno 556, extrba 上面再次输入n看到的下一个RBA号

其中556为上面INFO看到的队列文件,0之后的数字

关注dbDao.com的新浪微博

扫码关注dbDao.com 微信公众号:

沪公网安备 31010802001379号

TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569