本篇文檔根據實際遇到的情況進行更新。
一、報錯
ERROR OGG-01163 Bad column length (8) specified for column STATUS_ID in table <SCHEMA>.<TABLE>, maximum allowable length is 4.
二、報錯問題分析
可能性一、源端目標端字段長度不一致
應用報錯的列字段長度不匹配[源端varchar2(10), 目標端 varchar2(9)] ,對表的列在目標端進行添加長度
alter table xx modify column_name varchar2(10);
可能性二、字符集不同,源端目標端字段長度一致;
[例如源端gbk,目標端utf8, 表源端目標端均為varchar2(10),但是由於utf8 存儲中文3字節>gbk 2字節,導致字段長度還是不夠】
SQL> alter table a modify name varchar2(20 char); --需要注意,次modify操作,申請表TM6號鎖!!!
建議在執行修改操作之前查詢有沒有事務,id1= table object_id
SQL> SELECT TYPE,ID1,ID2,LMODE,REQUEST FROM V$LOCK WHERE ID1=89941;
可能性三、源端目標端字段長度一致、異構環境不同操作系統,需要更新Def文件
操作系統跨平台ogg同步時,由於未配置ddl同步或無法配置ddl同步,源端進行ddl操作加大字段長度等,很可能導致目標端應用進程abend,提示長度不匹配,長度不足,需要更新def文件定義。
可能性四、源端目標端字段長度一致,相同操作系統,源端加大字段長度限制,但是未規范操作重啟抽取進程,導致dump文件中記錄的字段限制未更新!!!
如下爭對可能性四,進行主要說明!
2.1 復制進程報錯分析
參考文檔 Replicat Abends with OGG-01163 after Executing Alter Table Modify at Source and Target Databases (Doc ID 2468892.1) OGG-01163 Bad Column Length (111) Specified For Column (Doc ID 2151580.1) 復制進程abend GGSCI> info R_1 REPLICAT r1 Last Started 2020-11-16 10:40 Status ABENDED Checkpoint Lag 00:00:04 (updated 81:43:36 ago) Log Read Checkpoint File /ogg/dirdat/by000003105 2020-11-13 00:57:56.003931 RBA 14279905
ERROR OGG-01163 Bad column length (38) specified for column C_NAME in table O.O, maximum allowable length is 32.
目標端C_NAME VARCHAR2(256)
源端C_NAME VARCHAR2(256) 數據庫字符集相同,不存在轉換問題!
使用logdump工具查詢
[oracle ogg]$ ./logdump
Oracle GoldenGate Log File Dump Utility for Oracle
Version 19.1.0.0.4 OGGCORE_19.1.0.0.0_PLATFORMS_191017.1054
Copyright (C) 1995, 2019, Oracle and/or its affiliates. All rights reserved.
Logdump 68 >open /ogg/dirdat/by000003105
Current LogTrail is /ogg/dirdat/by000003105
Logdump 69 >ghdr on
Logdump 70 >detail on
Logdump 71 >detail data
Logdump 72 >usertoken on
Logdump 74 >FILTER INClude FILENAME O.O
Logdump 75 >
Logdump 75 >n
Scanned 10000 records, RBA 2953351, 2020/11/13 00:56:18.004.767
Hdr-Ind : E (x45) Partition : . (x00)
UndoFlag : . (x00) BeforeAfter: A (x41)
RecLength : 2600 (x0a28) IO Time : 2020/06/16 17:23:27.304.968
IOType : 170 (xaa) OrigNode : 2 (x02)
TransInd : . (x03) FormatType : R (x52)
SyskeyLen : 0 (x00) Incomplete : . (x00)
DDR/TDR Idx: (001, 013) AuditPos : 543954400
Continued : N (x00) RecCount : 1 (x01)
2020/06/16 17:23:27.304.968 Metadata Len 2600 RBA 4957448
Table Name:
*
1)Name 2)Data Type 3)External Length 4)Fetch Offset 5)Scale 6)Level
7)Null 8)Bump if Odd 9)Internal Length 10)Binary Length 11)Table Length 12)Most Sig DT
13)Least Sig DT 14)High Precision 15)Low Precision 16)Elementary Item 17)Occurs 18)Key Column
19)Sub DataType 20)Native DataType 21)Character Set 22)Character Length 23)LOB Type 24)Partial Type
*
TDR version: 11
Definition for table
Record Length: 9912
Columns: 33
······
C_NAME 64 32 76 0 0 1 0 32 32 0 0 0 0 0 1 0 0 0 1 -1 0 0 0
2.2 源端OGG抽取進程重啟
源端重啟進程 GGSCI 2> info E1 EXTRACT E1 Last Started 2020-06-16 17:22 Status RUNNING GGSCI 6> info E1,detail Trail Name Seqno RBA Max MB Trail Type ./dirdat/by 1265 210223246 500 EXTTRAIL GGSCI () 3> stop E1 GGSCI () 5> start E1 GGSCI () 8> info E1,detail Trail Name Seqno RBA Max MB Trail Type ./dirdat/by 1266 1421356 500 EXTTRAIL GGSCI () 10> info P1,detail Log Read Checkpoint File /ogg2/by000001266 2020-11-16 11:15:22.000000 RBA 2509450 Trail Name Seqno RBA Max MB Trail Type ./dirdat/by 3162 175791621 200 RMTTRAIL 目標端再次對最新的dump文件進行logdump -rw-r----- 1 oracle oinstall 181049628 Nov 16 11:17 ./dirdat/by000003162 Logdump 78 >open ./dirdat/by000003162 ghdr on detail on detail data usertoken on FILTER INClude FILENAME 0.O n Scanned 10000 records, RBA 2919190, 2020/11/16 11:24:29.990.984 open ./dirdat/by000003163 open ./dirdat/by000003164 2020/11/16 11:59:34.816.667 Metadata Len 3466 RBA 46097932 Table Name: O.O * 1)Name 2)Data Type 3)External Length 4)Fetch Offset 5)Scale 6)Level 7)Null 8)Bump if Odd 9)Internal Length 10)Binary Length 11)Table Length 12)Most Sig DT 13)Least Sig DT 14)High Precision 15)Low Precision 16)Elementary Item 17)Occurs 18)Key Column 19)Sub DataType 20)Native DataType 21)Character Set 22)Character Length 23)LOB Type 24)Partial Type * TDR version: 11 Definition for table Record Length: 15848 Columns: 44 ······ C_NAME 64 256 300 0 0 1 0 256 256 0 0 0 0 0 1 0 0 0 1 -1 0 0 0
解決方法: 1.target alter REPLICAT R_BYPRI1,extseq 3162,extrba 0
跳過報錯的rba,一直跳到源端重啟抽取進程后,輸出的最新的dump文件,最新的dump文件中表的結構更新到256,可以完成同步!!! 但是這樣會導致丟失很多數據變化
2.target add def file
爭對這一個表,單獨新增一個OGG復制進程,報錯的OGG復制進程刪除這個報錯表的同步信息。 新增一個進程,使用def文件指定!!!采用異構的方式進行同步 ogg 19版本,一個復制進程,使用ASSUMETARGETDEFS +sourcedefs ./dirdef/r1.def,OVERRIDE 不兼容
2020-11-16 13:20:53 ERROR OGG-10107 (r1.prm) line 269: Parsing error, parameter [assumetargetdefs] conflicts with parameter [sourcedefs].
ASSUMETARGETDEFS
map ······
--map 0.0,target 0.0;
add
sourcedefs ./dirdef/r1.def,OVERRIDE
map 0.0,target 0.0;
2.3 問題處理
選擇新建一個OGG復制進程,使用def文件進行,采用異構方法進行同步;
原abend進程刪除同步錯誤的表信息,恢復同步;
新增一個ckpt表
OGG>dblogin USERID ogg,PASSWORD cc
OGG>add checkpointtable ogg.ckpt_rep03
新建復制進程
OGG>add rep r3,exttrail /ogg/dirdat/by checkpointtable ogg.ckpt_rep03
OGG>edit param r3
replicat r3
USERID ogg,PASSWORD CC
discardfile ./dirrpt/rep_03.DSC,append,megabytes 1024
reperror default,abend
HANDLECOLLISIONS
report at 02:01
sourcedefs ./dirdef/R1.def,OVERRIDE
map 0.0,target 0.0;
OGG>alter replicat R3,extseqno 3105,extrba 14279905