GoldenGateOGG-01163问题处理

GoldenGateOGG-01163问题处理

一、背景

近来计量中心项目管理测试环境GoldenGate同步配置针对部分表的同步持续不断地报OGG-01163错误,导致涉及部分表同步的所有Replicat进程Abended,使GoldenGate停止工作。出现该问题的Table的结构完全一致,出现问题后,无法正常启动Replicat进程。

二、问题分析

实际环境的GoldenGate报错信息如下:

HX_DJ.DJ_DJHZDYLBSZ

Usingthe following key columns for targettableHX_DJ.DJ_DJHZDYLBSZ: LB_DM.

SourceContext :

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-2510:05:08 ERROR OGG-01163 Bad column length (13) specified forcolumnLRR_DM in tableHX_DJ.DJ_DJHZDYLBSZ, maximum allowable length is11.

HX_RD.RD_YBNSRFDQGL_RDB

Usingthe following key columns for targettableHX_RD.RD_YBNSRFDQGL_RDB:RDPZUUID.

SourceContext :

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-2609:17:06 ERROR OGG-01163 Bad column length (7) specified forcolumnSJGSDQ in tableHX_RD.RD_YBNSRFDQGL_RDB, maximum

allowablelength is 5.

HX_RD.RD_NSSBFSRDJBGB

Usingthe following key columns for targettableHX_RD.RD_NSSBFSRDJBGB:RDPZUUID.

SourceContext :

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-2609:39:35 ERROR OGG-01163 Bad column length (7) specified forcolumnSJGSDQ in tableHX_RD.RD_NSSBFSRDJBGB, maximumal

lowablelength is 5.

HX_ZSJ.T_XT_HCBXX

Usingthe following key columns for targettableHX_ZSJ.T_XT_HCBXX:TABLE_NAME.

SourceContext :

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-1623:49:10 ERROR OGG-01163 Bad column length (3) specified forcolumnQUERY_FROM_DB in tableHX_ZSJ.T_XT_HCBXX, maximum allowablelength is 1.

我们针对上述问题所涉及的表及相应字段分析发现,出现问题的进程的SourceTarget两端表的结构完全一致,并不符合OGG-01163错误所描述的那样两端的字段长度不一致。

但是这些出现问题的表字段具有一个共性:都是char类型。

SQL>desc HX_RD.RD_NSSBFSRDJBGB

Name Type Nullable DefaultComments

SJGSDQ     CHAR2(5)              '00000' 数据归属地区



SQL>desc HX_FP.FP_KFYJXX

Name Type Nullable DefaultComments

--------------------- -------------------------------------------------------------------

.....

SJGSDQ   CHAR(5)              '00000' 数据归属地区



查阅OracleGoldenGate官方文档,《ErrotMessageReference》上面有对该问题的描述:

OGG-01163:Bad column length ({3,number,0})specified for column {1} in table{0},

maximumallowable length is {2,number,0}.

Cause:There was an internal errorconverting trail file data. A bufferoverflow

wasdetected.

Action:Contact Oracle Support.

众所周知,Oracle在处理char类型字段时,会对该字段自动补位,但是即便如此,字段长度也不会超出char类型所定义的长度。为了一看究竟是不是如官方文档所说(GoldenGate在转换trail文件数据时发生内部错误,系统检测到buffer溢出),我们利用GoldenGate自带的logdump工具对产生该错误时读取的trail文件进行了分析,

SQL>desc HX_FP.FP_KFYJXX

Name Type Nullable DefaultComments

--------------------- -------- --------------------------------

1.FPYJUUID CHAR(32) 。。。。。。。

2.SSSWJG_DM CHAR(11) 。。。。。。。

3.FPKF_DM CHAR(32) 。。。。。。。

4.FPZL_DM VARCHAR2(5) 。。。。。。。

5.FPHLBS NUMBER(10) 。。。。。。。

6.FPYJBS NUMBER(10) 。。。。。。。

7.LRR_DM CHAR(11) 。。。。。。。

8.LRRQ DATE 。。。。。。。

9.XGR_DM CHAR(11) 。。。。。。。

10.XGRQ DATE 。。。。。。。

11.FPYJBL NUMBER(16,6) 。。。。。。。

12.SJGSRQ DATE 。。。。。。。

13.SJGSDQ    CHAR(5)              '00000' 数据归属地区


Trail文件dump

通过inforeplicatrep,showch 可以查看所在的trail文件,并可以查看seqnorba

Logdump15 >open ./dirdat/zc000063

CurrentLogTrail is/home/oracle/ggs/dirdat/zc000063

Logdump16 >ghdr on

Logdump17 >detail on

Logdump18 >detail data

Logdump19 >usertoken on

Logdump20 >pos 653304

Readingforward from RBA 653304



Logdump21 >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/1611:36:51.721.932 Insert Len 270 RBA 653304

Name:HX_FP.FP_KFYJXX

AfterImage: Partition 4Gs

000000220000 64623834 3732 6166 6563 3137 3432 | ..."..db8472afec1742

3837386233623063 6562 6366 3361 3538 3263 0001 | 878b3b0cebcf3a582c..

000d000031353030 3130 3933 3830 3000 0200 2200 | ....15001093800...".

0031626632626231 3962 3961 3634 6463 3239 6562 | .1bf2bb19b9a64dc29eb

3934663565613131 3330 6536 6300 0300 0900 0000 | 94f5ea1130e6c.......

0534323033360004 000a 0000 0000 0000 0000 0064 | .42036.............d

0005000a00000000 0000 0000 0005 0006 000d 0000 | ....................

Column 0(x0000), Len 34 (x0022) //可以看到列是从0开始的,那么13列,就是第12Col

0000646238343732 6166 6563 3137 3432 3837 3862 | ..db8472afec1742878b

3362306365626366 3361 3538 3263|3b0cebcf3a582c

Column1(x0001), Len 13 (x000d)

0000313530303130 3933 3830 30|..15001093800

Column 2(x0002), Len 34 (x0022)

0000316266326262 3139 6239 6136 3464 6332 3965 | ..1bf2bb19b9a64dc29e

6239346635656131 3133 3065 3663|b94f5ea1130e6c

Column3(x0003), Len 9 (x0009)

0000000534323033 36|....42036

Column4(x0004), Len 10 (x000a)

0000000000000000 0064|.........d

Column 5(x0005), Len 10 (x000a)

0000000000000000 0005|..........

Column 6(x0006), Len 13 (x000d)

0000313530303130 3932 3231 30 |..15001092210

Column 7(x0007), Len 21 (x0015)

0000323031322d31 302d 3136 3a31 313a 3332 3a33 | ..2012-10-16:11:32:3

31|1

Column 8(x0008), Len 13 (x000d)

ffff000000000000 0000 0000 00|.............

Column 9(x0009), Len 21 (x0015)

ffff313930302d30 312d 3031 3a30 303a 3030 3a30 | ..1900-01-01:00:00:0

30|0

Column 10(x000a), Len 10 (x000a)

0000000000000000 c350 |.........P

Column 11(x000b), Len 21 (x0015)

ffff313930302d30 312d 3031 3a30 303a 3030 3a30 | ..1900-01-01:00:00:0

30 | 0

Column  12 (x000c), Len     9 (x0009) 

0000000530303030 30 |....00000

我们发现实际trail文件中相应字段的长度都要比表定义的长度要长(猜测可能跟Oracle内部机制有关),但是实际发生问题的字段长度要比定义长度长很多(9vs5)。定位问题该问题是由bug导致。考虑通过配置OGG同步不同定义的表来规避此问题。

三、问题解决

在源端用defgen生成定义文件,然后再传到目标端,并在复制进程指定,并去掉assumetargetdefs参数,具体操作步骤如下:

--在源端数据库OGG安装目录下创建配置文件source.prm

$cd /goldengate

$vim source.prm

defsfile./dirdef/source.def,purge

useridogg, PASSWORD ogg

tableusername.tablename;

tableusername.tablename;

···

--生成数据库表的定义文件

$cd /goldengate

$./defgen paramfile source.prm

--使用ftp./dirdef/source.def上传到目标端./dirdef目录下

--在复制进程中去掉ASSUMETARGETDEFS,加上如下参数:

SOURCEDEFS./dirdef/source.def

注:抓取进程可以考虑不新增加新的抓取进程,但是应用进程需新增一个,新增加的应用进程需增加参数:HANDLECOLLISIONS(查重功能)。并且启动前须作操作alterreplgggextseqno 37, extrba 1883。(此时的extseqnoextrba为处理失败时的值)

 这些值怎么查看呢?

info进程名称,showch


你可能感兴趣的:(OGG)