近来计量中心项目管理测试环境 GoldenGate 同步配置针对部分表的同步持续不断地报 OGG-01163 错误,导致涉及部分表同步的所有 Replicat 进程 Abended ,使GoldenGate停止工作。出现该问题的 Table 的结构完全一致,出现问题后,无法正常启动 Replicat 进 程。
Source 和 Target 数据库版本:11.2.0.3.0
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise EditionRelease11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for IBM/AIX RISC System/6000: Version11.2.0.3.0 -Production
NLSRTL Version 11.2.0.3.0 - Production
Source 和 Target 的GoldenGate 版本:
$ ggsci -v
Oracle GoldenGate Command Interpreter forOracle
Version 11.2.1.0.13_0213878881OGGCORE_11.2.1.0.4_PLATFORMS_120323.1345
AIX 5L, ppc, 64bit (optimized), Oracle 11gon Mar 232012 17:01:26
Copyright (C) 1995, 2012, Oracle and/or itsaffiliates.All rights reserved.
实际环境的GoldenGate报错信息如下:
HX_DJ.DJ_DJHZDYLBSZ 表
Using the following key columns for targettableHX_DJ.DJ_DJHZDYLBSZ: LB_DM.
Source Context :
SourceModule :[ggstd.conv.endian]
SourceID :[/scratch/aime1/adestore/views/aime1_staxk11/oggcore/OpenSys/src/gglib/ggstd/lecnv.c]
SourceFunction :[convCompSQL(char *, file_def *,rowlen_t)]
SourceLine : [591]
2012-10-25 10:05:08 ERROR OGG-01163 Bad column length (13) specified for columnLRR_DM in tableHX_DJ.DJ_DJHZDYLBSZ, maximum allowable length is 11.
HX_RD.RD_YBNSRFDQGL_RDB 表
Using the following key columns for targettableHX_RD.RD_YBNSRFDQGL_RDB: RDPZUUID.
Source Context :
SourceModule :[ggstd.conv.endian]
SourceID :[/scratch/aime1/adestore/views/aime1_staxj16/oggcore/OpenSys/src/gglib/ggstd/lecnv.c]
SourceFunction :[convCompSQL(char *, file_def *,rowlen_t)]
SourceLine : [591]
2012-10-26 09:17:06 ERROR OGG-01163 Bad column length (7) specified for columnSJGSDQ in tableHX_RD.RD_YBNSRFDQGL_RDB, maximum
allowable length is 5.
HX_RD.RD_NSSBFSRDJBGB 表
Using the following key columns for targettableHX_RD.RD_NSSBFSRDJBGB: RDPZUUID.
Source Context :
SourceModule :[ggstd.conv.endian]
SourceID :[/scratch/aime1/adestore/views/aime1_staxk11/oggcore/OpenSys/src/gglib/ggstd/lecnv.c]
SourceFunction :[convCompSQL(char *, file_def *,rowlen_t)]
SourceLine : [591]
2012-10-26 09:39:35 ERROR OGG-01163 Bad column length (7) specified for columnSJGSDQ in tableHX_RD.RD_NSSBFSRDJBGB, maximumal
lowable length is 5.
HX_ZSJ.T_XT_HCBXX 表
Using the following key columns for targettableHX_ZSJ.T_XT_HCBXX: TABLE_NAME.
Source Context :
SourceModule :[ggstd.conv.endian]
SourceID :[/scratch/aime1/adestore/views/aime1_staxk11/oggcore/OpenSys/src/gglib/ggstd/lecnv.c]
SourceFunction :[convCompSQL(char *, file_def *,rowlen_t)]
SourceLine : [591]
2012-10-16 23:49:10 ERROR OGG-01163 Bad column length (3) specified for columnQUERY_FROM_DB in tableHX_ZSJ.T_XT_HCBXX, maximum allowable length is 1.
全功能环境配置如下:
Source 和 Target 的OS 版本:AIX 6100
# oslevel
6.1.0.0
# oslevel -r
6100-07
Source 和 Target 数据库版本:11.2.0.1.0
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise EditionRelease11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for IBM/AIX RISC System/6000: Version11.2.0.3.0 -Production
NLSRTL Version 11.2.0.3.0 - Production
Source 和 Target 的GoldenGate 版本:
$ ggsci -v
Oracle GoldenGate Command Interpreter forOracle
Version 11.2.1.13.3_0213878881OGGCORE_11.2.1.0.4_PLATFORMS_120323.1345
AIX 5L, ppc, 64bit (optimized), Oracle 11gon Mar 232012 17:01:26
Copyright (C) 1995, 2012, Oracle and/or itsaffiliates.All rights reserved.
我们针对上述问题所涉及的表及相应字段分析发现,出现问题的进程的Source和Target两端表的结构完全一致,并不符合 OGG-01163 错误所描述的那样两端的字段长度不一致。
但是这些出现问题的表字段具有一个共性:都是char类型。
SQL> desc hx_zsj.t_xt_hcbxx
Name Type Nullable DefaultComments
-------------------- ------------- ------------------------------------------------
TABLE_NAME VARCHAR2(150) 。。。。。。。
CACHE_NAME VARCHAR2(30) Y 。。。。。。。
DATA_QUERY_SQL VARCHAR2(750) Y 。。。。。。。。。。。。。。 L
。。。。。。。。。。。。。 VARCHAR2(15) 。。。。。。。
。。。。。。。。。。。。。 VARCHAR2(750) 。。。。。。。
DEFAULT_VALUE_COLUMN VARCHAR2(75) 。。。。。。。
VERSION VARCHAR2(6) 。。。。。。。
XY_BJ VARCHAR2(1) 'Y' 。。。。。。。
GENERATE_JSON VARCHAR2(1) 'N' 是否生成压缩过的JSON字符串,只有Key/Value缓存系统生效
QUERY_FROM_DB CHAR2(1) 'N' 是否实时从数据库查询缓存数据
SQL> desc HX_RD.RD_NSSBFSRDJBGB
Name Type NullableDefaultComments
----------- -------------- -------- ---------------
RDPZUUID CHAR(32) 。。。。。。。
LCSLID CHAR(32) Y 。。。。。。。
DJXH NUMBER(20) 。。。。。。。
YXQQ DATE Y 。。。。。。。
SDDZ VARCHAR2(150) Y 。。。。。。。
YZBM CHAR(6) Y 。。。。。。。
。。。。。。 DATE Y 。。。。。。。
。。。。。。 VARCHAR2(3000) Y 。。。。。。。
。。。。。。 CHAR(11) 。。。。。。。。。。。
。。。。。。 DATE 。。。。。。。。
XGR_DM CHAR(11) Y 。。。。。。。
XGRQ DATE Y 。。。。。。。
SJGSRQ DATE Y 。。。。。。。日期
YXBZ CHAR(1) Y 。。。。。。。
SJZZRQ DATE Y 。。。。。。。
SPSDSX_DM CHAR(1) Y 。。。。。。。
SKJNFS_DM_1 VARCHAR2(20) Y 。。。。。。。
SPSDFS_DM_1 VARCHAR2(20) Y 。。。。。。。代码
SBFS VARCHAR2(60) Y 申报方式
SJGSDQ CHAR2(5) '00000' 数据归属地区
SQL> desc HX_FP.FP_KFYJXX
Name Type NullableDefaultComments
--------- ------------ -------- ---------------
FPYJUUID CHAR(32) 。。。。。。。
SSSWJG_DM CHAR(11) 。。。。。。。
FPKF_DM CHAR(32) 。。。。。。。
FPZL_DM VARCHAR2(5) 。。。。。。。
FPHLBS NUMBER(10) 。。。。。。。数
FPYJBS NUMBER(10) 。。。。。。。数
LRR_DM CHAR(11) 。。。。。。。
LRRQ DATE 。。。。。。。
XGR_DM CHAR(11) Y 。。。。。。。
XGRQ DATE Y 。。。。。。。
FPYJBL NUMBER(16,6)
SJGSRQ DATE Y 数据归属日期
SJGSDQ CHAR(5) '00000' 数据归属地区
查阅OracleGoldenGate 官方文档,《ErrotMessage Reference》上面有对该问题的描述:
OGG-01163: Bad column length ({3,number,0})specified for column {1} in table {0},
maximum allowable length is {2,number,0}.
Cause: There was an internal errorconverting trail file data. A buffer overflow
was detected.
Action: Contact Oracle Support.
众所周知,Oracle在处理 char 类型字段时,会对该字段自动补位,但是即便如此,字段长度也不会超出char类型所定义的长度。为了一看究竟是不是如官方文档所说(GoldenGate在转换trail文件数据时发生内部错误,系统检测到buffer溢出),我们利用GoldenGate自带的logdump工具对产生该错误时读取的trail文件进行了分析,
SQL> desc HX_FP.FP_KFYJXX
Name Type NullableDefaultComments
--------- ------------ -------- ---------------
FPYJUUID CHAR(32) 。。。。。。。
SSSWJG_DM CHAR(11) 。。。。。。。
FPKF_DM CHAR(32) 。。。。。。。
FPZL_DM VARCHAR2(5) 。。。。。。。
FPHLBS NUMBER(10) 。。。。。。。数
FPYJBS NUMBER(10) 。。。。。。。数
LRR_DM CHAR(11) 。。。。。。。
LRRQ DATE 。。。。。。。
XGR_DM CHAR(11) Y 。。。。。。。
XGRQ DATE Y 。。。。。。。
FPYJBL NUMBER(16,6)
SJGSRQ DATE Y 数据归属日期
SJGSDQ CHAR(5) '00000' 数据归属地区
Trail 文件dump:
通过inforeplicat rep,showch 可以查看所在的trail文件,并可以查看seqno和rba。
Logdump 15 >open ./dirdat/zc000063
Current LogTrail is/home/oracle/ggs/dirdat/zc000063
Logdump 16 >ghdr on
Logdump 17 >detail on
Logdump 18 >detail data
Logdump 19 >usertoken on
Logdump 20 >pos 653304
Reading forward from RBA 653304
Logdump 21 >n
___________________________________________________________________
Hdr-Ind : E (x45) Partition : . (x04)
UndoFlag : . (x00) BeforeAfter: A (x41)
RecLength : 270 (x010e) IO Time : 2012/10/16 11:36:51.721.932
IOType : 5 (x05) OrigNode : 255 (xff)
TransInd : . (x03) FormatType : R (x52)
SyskeyLen : 0 (x00) Incomplete : . (x00)
AuditRBA : 500 AuditPos : 18925072
Continued : N (x00) RecCount : 1 (x01)
2012/10/16 11:36:51.721.932 Insert Len 270 RBA 653304
Name: HX_FP.FP_KFYJXX
After Image: Partition 4 G s
00000022 0000 64623834 3732 6166 6563 3137 3432 | ..."..db8472afec1742
38373862 33623063 6562 6366 3361 3538 3263 0001 | 878b3b0cebcf3a582c..
000d0000 31353030 3130 3933 3830 3000 0200 2200 | ....15001093800...".
00316266 32626231 3962 3961 3634 6463 3239 6562 | .1bf2bb19b9a64dc29eb
39346635 65613131 3330 6536 6300 0300 0900 0000 | 94f5ea1130e6c.......
05343230 33360004 000a 0000 0000 0000 0000 0064 | .42036.............d
0005000a 00000000 0000 0000 0005 0006 000d 0000 | ....................
Column 0(x0000), Len 34 (x0022)
00006462 38343732 6166 6563 3137 3432 3837 3862 | ..db8472afec1742878b
33623063 65626366 3361 3538 3263 |3b0cebcf3a582c
Column 1(x0001), Len 13 (x000d)
00003135 30303130 3933 3830 30 |..15001093800
Column 2(x0002), Len 34 (x0022)
00003162 66326262 3139 6239 6136 3464 6332 3965 | ..1bf2bb19b9a64dc29e
62393466 35656131 3133 3065 3663 |b94f5ea1130e6c
Column 3(x0003), Len 9 (x0009)
00000005 34323033 36 |....42036
Column 4(x0004), Len 10 (x000a)
00000000 00000000 0064 |.........d
Column 5(x0005), Len 10 (x000a)
00000000 00000000 0005 |..........
Column 6(x0006), Len 13 (x000d)
00003135 30303130 3932 3231 30 |..15001092210
Column 7(x0007), Len 21 (x0015)
00003230 31322d31 302d 3136 3a31 313a 3332 3a33 | ..2012-10-16:11:32:3
31 | 1
Column 8(x0008), Len 13 (x000d)
ffff0000 00000000 0000 0000 00 |.............
Column 9(x0009), Len 21 (x0015)
ffff3139 30302d30 312d 3031 3a30 303a 3030 3a30 | ..1900-01-01:00:00:0
30 | 0
Column 10(x000a), Len 10 (x000a)
00000000 00000000 c350 |.........P
Column 11(x000b), Len 21 (x0015)
ffff3139 30302d30 312d 3031 3a30 303a 3030 3a30 | ..1900-01-01:00:00:0
30 | 0
Column 12 (x000c), Len 9 (x0009)
00000005 30303030 30 |....00000
我们发现实际trail文件中相应字段的长度都要比表定义的长度要长(猜测可能跟Oracle内部机制有关),但是实际发生问题的字段长度要比定义长度长很多(9vs5)。定位问题该问题是由bug导致。考虑通过配置OGG同步不同定义的表来规避此问题。
在源端用defgen生成定义文件,然后再传到目标端,并在复制进程指定,并去掉assumetargetdefs参数,具体操作步骤如下:
--在源端数据库OGG安装目录下创建配置文件source.prm
$ cd /goldengate
$ vim source.prm
defsfile ./dirdef/source.def,purge
userid ogg, PASSWORD ogg
table username.tablename;
table username.tablename;
···
--生成数据库表的定义文件
$ cd /goldengate
$ ./defgen paramfile source.prm
--使用ftp将./dirdef/source.def上传到目标端./dirdef目录下
--在复制进程中去掉ASSUMETARGETDEFS,加上如下参数:
SOURCEDEFS ./dirdef/source.def
注:抓取进程可以考虑不新增加新的抓取进程,但是应用进程需新增一个,新增加的应用进程需增加参数:HANDLECOLLISIONS(查重功能)。并且启动前须作操作alterreplggg extseqno 37, extrba 1883。(此时的extseqno和extrba为处理失败时的值)
这些值怎么查看呢?
info 进程名称,showch
如有问题请联系 王杰 15314117200