本篇文档根据实际遇到的情况进行更新。
一、报错
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