今天一客户的GoldenGate for bigdata, 从oracle同步到kafka时,应用端进程失败,报错如下:
2025-09-29 17:58:56 ERROR OGG-01163 Oracle GoldenGate Delivery, r_ka.prm: Bad column length (1287) specified for column XINFO in table ANBOB.T_PATH_INFO, maximum allowable length is 400
原因
源库表近期有做DDL 变更该表的列长度,该问题重启ogg进程也不能解决。本案例源端oracle修改了表结构,对字段XINFO长度进行了扩展,但是源端没有开启ddl,这就导致源端的队列文件没有对表的metadata进行更新(默认队列文件里包含表的metadata)。而且目标端OGG并没有使用defgen文件,这就导致了新的数据依旧使用了旧的表结构,出现了超出数据最大长度的报错。
解决方案
1.在目标端添加defgen文件,缺点就是要随着源端的表结构变更同步更新目标端的defgen文件。
$ ./defgen paramfile dirprm/ANBOB.prm
myschema.prm
CHARSET UTF-8
DEFSFILE dirprm/ANBOB.def purge CHARSET UTF-8 FORMAT RELEASE 12.3
userid ***, password ***
NOCATALOG
table ANBOB.*;
复制def file到目标端,增加replicat进程配置
SOURCEDEFS dirprm/myschema.def OVERRIDE
Note: OVERRIDE是必要的,否则matadata是从trail-file中抽取。
重启replicat就可以解决。