应用复制进程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

 

posted @ 2020-05-08 15:10  绿茶有点甜  阅读(1916)  评论(0编辑  收藏  举报