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版本(askmac.cn)
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位下载地址:
64位下载地址:
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)(askmac.cn)
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之后的数字
Comment