應用復制進程abend,報錯OGG-01163字段列長度不夠


本篇文檔根據實際遇到的情況進行更新。

一、報錯

 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM