在目标端的replicat进程报如下错:
OGG-01163 Bad column length (6) specified for column SHANGPCK_RULE in table LMIS.JC_DWZL, maximum allowable length is 1.
状况:
源表与目标表异构.
字段SHANGPCK_RULE 存在于源表,目标表不需要这个字段。
源表与目标表之间做了def定义
由于源表新增加了字段,就要重新生成def文件。平常这样是正常 的。可次无论我重复多少次,都是报同样错。
期间的测试:
1。 在目标表增加字段 ,开启replicat 仍然报同样的错
2。 在目标端指定字段集,仍然报同样错
SETENV (NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")
3。 在目标表增加字段,并增加字段长度依然报错
最后发现网上旧版本的ogg 关于char(1)的bug报告。报错是一样的,但是官方说在新版本已经修复这个bug。而且我用的ogg是最新版本的。
于是构想修改源表的SHANGPCK_RULE 字段使其长度更改。与开发沟通不合作。只好另外想办法了。
修改不了源表的字段长度,那就修改def文件关于SHANGPCK_RULE长度吧。
原先hb.def文件是如下:
YEWLXR_PHONE 64 40 2384 0 0 1 0 40 40 0 0 0 0 0 1 0 0 0 1 -1 0 0 0
ZHIG_PHONE 64 40 2430 0 0 1 0 40 40 0 0 0 0 0 1 0 0 0 1 -1 0 0 0
SHANGPCK_RULE 64 1 2476 0 0 1 0 1 1 0 0 0 0 0 1 0 0 0 1 -1 0 0 0
BANKACCOUNT 64 30 2482 0 0 1 0 30 30 0 0 0 0 0 1 0 0 0 1 -1 0 0 0
End of definition
第一次更改,想把SHANGPCK_RULE长度改为2
YEWLXR_PHONE 64 40 2384 0 0 1 0 40 40 0 0 0 0 0 1 0 0 0 1 -1 0 0 0
ZHIG_PHONE 64 40 2430 0 0 1 0 40 40 0 0 0 0 0 1 0 0 0 1 -1 0 0 0
SHANGPCK_RULE 64
2 2476 0 0 1 0
2 2 0 0 0 0 0 1 0 0 0 1 -1 0 0 0
BANKACCOUNT 64 30 2482 0 0 1 0 30 30 0 0 0 0 0 1 0 0 0 1 -1 0 0 0
End of definition
运行replicat 之后报错终止运行:
2016-08-23 11:51:48 ERROR OGG-01163 Bad column length (6) specified for column SHANGPCK_RULE in table LMIS.JC_DWZL, maximum allowable length is 2.
maximum allowable length 由1 变成2
第二次更改SHANGPCK_RULE 长度为6
YEWLXR_PHONE 64 40 2384 0 0 1 0 40 40 0 0 0 0 0 1 0 0 0 1 -1 0 0 0
ZHIG_PHONE 64 40 2430 0 0 1 0 40 40 0 0 0 0 0 1 0 0 0 1 -1 0 0 0
SHANGPCK_RULE 64
6 2476 0 0 1 0
6 6 0 0 0 0 0 1 0 0 0 1 -1 0 0 0
BANKACCOUNT 64 30 2482 0 0 1 0 30 30 0 0 0 0 0 1 0 0 0 1 -1 0 0 0
End of definition
运行replicat 之后正常运行。
就这样用这种另类方法解决了这个问题 。这应该是一个bug.
ogg版本号:
Version 12.1.2.1.0 OGGCORE_12.1.2.1.0_PLATFORMS_140920.0203 Windows x64 (optimized), Oracle 11g on Sep 20 2014 09:16:32
源端extract上发生OGG-01163错误,解决办法如上,就是在源端的配置 文件中添加def定义文件,然后修改长度。
如下:
extract Pump
dynamicresolution
userid ggs,password ggs
rmthost 10.3.99.99, mgrport 7809 compress
sourcedefs F:\ogg\dirdef\gx.def
rmttrail D:\ogg\dirdat\gx
并修改文件F:\ogg\dirdef\gx.def 中相关字段的长度