您的位置:首页 > 其它

OGG复制同步,提示字段长度不够ORA-01704

2020-08-27 23:31 886 查看

日常运维OGG的环境中,如果遇到复制进程报错,提示字段长度不足如何处理???

正常情况下,字段长度不足,但是未达到Oracle的限制时,可以对字段进行扩大限制满足目的。

实际环境中,遇到源端GBK,目标端AL32UTF8,目标端表使用varchar2(4000 char)。

但是还是遇到ORA -01704的问题。

 

一、使用varchar2(4000 char) 能存储4000个汉字吗???

如下测试验证说明,实际上Oracle还是受到varchar2 4000 bytes的限制,一个汉字占用3字节。    

这里说明下varchar2(xx char) 这个假设是20限制,说明这个列最大允许存储20个字符,如果都是汉字,实际上max 限制是=60 bytes 及默认情况下的varchar2(60).

SQL> desc c
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
CC_NAME                                            VARCHAR2(4000 CHAR)
insert into c values('才');
SQL> select length(cc_name) from c;
SQL> insert into c values('炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起');

LENGTH(CC_NAME)
---------------
1
759
SQL> insert into c values('炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起
炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层
3ff8
薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起
');
ORA-01704: string literal too long
加一起1500字符左右就报错了???  按照4000/3=1333字符

SQL> insert into c values('炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵
参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起
参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠空而炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起
参天古树纵横交错繁茂的树冠只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦云雾间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣飞鸟腾空而起嘶鸣着翱翔于邦东部的池云雨林云着翱翔
池云雨林云位林云');

==
SQL> insert into c values('炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵
参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起
3  参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只
飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠空而炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起 4 参天古树纵横交错繁茂的树冠只飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣飞鸟腾空而起嘶鸣着翱翔于天际间炎炎夏日位于联邦云雾间炎炎夏日位于联邦东部的池云雨林云雾弥漫好似一层薄纱环绕一棵棵参天古树纵横交错繁茂的树冠中时而有几只飞鸟腾空而起嘶鸣飞鸟腾空而起嘶鸣着翱翔于邦东部的池云雨林云着翱翔 5 池云雨林云位林云'); 1 row created. [oracle@test ~]$ echo $NLS_LANG AMERICAN_AMERICA.UTF8 ORA-01704: string literal too long SQL> SQL> select length(cc_name) from c; LENGTH(CC_NAME) --------------- 1329 1333 1 759 879 1244 1276 1336 1334 1336 10 rows selected. ORA-01704: string literal too long 加一起1500字符左右就报错了??? 按照4000/3=1333字符 SQL> desc c Name Null? Type ----------------------------------------- -------- ---------------------------- CC_NAME VARCHAR2(4000 CHAR)

 

二 、目标端遭遇字段长度不足的问题如何处理???

1.目标端列类型从varchar2 改造为clob

2.使用OGG 复制进程参数,截取部分字符,小于oracle 11g varchar2 4000 bytes的限制。

3.源端抽取是否有参数截取字段?  想法,有感兴趣的兄弟们可以找找资料测试下。

1.目标端列类型从varchar2 改造为clob

source
SQL> desc d1
STATUS VARCHAR2(10)
SQL> select ID,STATUS from d1;
ID STATUS
---------- ----------
6 0
SQL> alter table d1 modify STATUS VARCHAR2(12);
SQL> update d1 set status='123456789012' where id=6;
SQL> commit;
target
GGSCI (t2) 14> info all
REPLICAT    ABENDED     REPA        00:00:00      00:00:35
GGSCI (t2) 15> view report repa
2020-08-27 14:55:02  ERROR   OGG-01163  Bad column length (12) specified for column STATUS in table YZ.D1, maximum allowable length is 10.

修改字段类型
alter table d1 rename column status to status_old;
alter table d1 add status clob;
update d1 set status=trim(status_old);
验证
SQL> select id,status,status_old from d1;
ID STATUS               STATUS_OLD
---------- -------------------- ----------
6 0                    0
alter table d1 drop column status_old;

可选
trim函数从字符串的开头或结尾删除所有指定的字符

SQL> desc d1
STATUS  CLOB

GGSCI (t2) 18> start repa

再次启动报错
2020-08-27 15:03:20  ERROR   OGG-01163  Bad column length (12) specified for column STATUS in table YZ.D1, maximum allowable length is 10.
2020-08-27 15:03:20  INFO    OGG-06511  Using following columns in default map by name: ID, CC_NAME, WITTIME, STATUS1, STATUS.
2020-08-27 15:03:20  INFO    OGG-06510  Using the following key columns for target table BAK_YZ.D1: ID, CC_NAME, WITTIME, STATUS1.
GGSCI (t2) 29> view param repa
assumetargetdefs
MAP YZ.D1,TARGET BAK_YZ.D1;
https://www.cnblogs.com/weimengjiacan/articles/8462982.html
OGG源端和目标端字段顺序不一致的解决方案
MAP YZ.D1,TARGET BAK_YZ.D1,colmap(usedefaults,status=status,status1=status1);

不好使,因此还是需要使用def文件。
DEF文件更换
$ vi ./dirdef/source_d1.prm
defsfile ./dirdef/source_d1.def,purge
USERID ogg,PASSWORD ogg
table YZ.D1;
$ ./defgen paramfile ./dirdef/source_d1.prm

目标端更新def文件,具体操作可以参考https://www.cnblogs.com/lvcha001/p/13039975.html
SQL> select id,status from d1;
ID STATUS
---------- --------------------
6 123456789012

小结:1.需要新增字段,全表字段update,对于大表来说效率太低,风险大;

            2.整个流程操作新增字段,全列更新,原字段rename,drop ,新字段rename,需要确认可以停业务;

           3.上述的说明操作有风险,好处是数据可以完整同步,不好的地方在于使用clob存储,效率低,并且> 4000 bytes的长度,oracle clob是专门存在clob 对应的segments上。小于4000字节,clob列的数据可以和表的其它行记录存在表的blocks中,等同于varchar2

2.使用OGG 复制进程参数,截取部分字符,小于oracle 11g varchar2 4000 bytes的限制。

 本次环境为linux redhat 6.9 11.2.0.4, OGG 19.1版本

根据思路,想要通过截取部分长度的方式,放弃超出字段长度的部分数据,让目标端的表列varchar2 <4000 bytes能正常存储。 
原因:正常情况下,重要的业务数据也很少存储>4000字节的,如果明显存储文本的早就clob了。 因此有些注释说明类的数据并不重要,可以视情况放弃。
@STREXT Use the @STREXT function to extract a portion of a string. For this function, Oracle GoldenGate supports the use of an escape sequence to represent characters in a string column in Unicode or in the
native character encoding of the Microsoft Windows, UNIX, and Linux operating systems. The target column must be a SQL Unicode data type if
any argument is supplied as Unicode. This function does not support NCHAR or NVARCHAR data types. Syntax @STREXT (string, begin_position, end_position) string The string from which to extract. The string can be either the name of a character column or a literal string. Enclose literals within single
quote marks. begin_position The character position at which to begin extraction. end_position The character position at which to end extraction. The end position is included in the extraction. Example The following example uses three @STREXT functions to extract a phone number into three different columns. CopyAREA_CODE = @STREXT (PHONE, 1, 3), PREFIX = @STREXT (PHONE, 4, 6), PHONE_NO = @STREXT (PHONE, 7, 10) @STRNCAT Use the @STRNCAT function to concatenate one or more strings to a maximum length. For this function, Oracle GoldenGate supports the use of an escape sequence to represent characters in a string column in Unicode or in
the native character encoding of the Microsoft Windows, UNIX, and Linux operating systems. The target column must be a SQL Unicode data type
if any argument is supplied as Unicode. This function does not support NCHAR or NVARCHAR data types. Syntax Copy@STRNCAT (string, max_length [, string, max_length] [, ...] ) string The name of a string (character) column or a literal string that is enclosed within single quote marks. max_length The maximum string length, in characters. Example The following concatenates two strings and results in ABC123. CopyPHONE_NO = @STRNCAT ('ABCDEF', 3, '123456', 3)

测试

第一部分:模拟报错,未出现,Oracle 19版本复制进程使用assumetargetdefs,目标端字段长度不足时,自动截取目标端的字段长度字符。超出忽略


source SQL> alter table d2 modify status varchar2(15); SQL> update d2 set status='123456789012345' where id=6; SQL> commit; target SQL> desc d2 Name Null? Type ----------------------------------------- -------- ---------------------------- ID NUMBER(38) CC_NAME VARCHAR2(200) WITTIME TIMESTAMP(6) STATUS VARCHAR2(10) SQL> select id,status from d2; ID STATUS ---------- -------------------- 6 1234567890 assumetargetdefs 2020-08-27T15:58:29.959-0700 WARNING OGG-06439 Oracle GoldenGate Delivery for Oracle, repa.prm: No unique key is defined for table D2.
All viable columns will be used to represent the key, but may not guarantee uniqueness. KEYCOLS may be used to define the key. 2020-08-27T15:58:29.960-0700 INFO OGG-02756 Oracle GoldenGate Delivery for Oracle, repa.prm: The definition for table YZ.D2 is obtained
from the trail file. 2020-08-27T15:58:29.960-0700 INFO OGG-06511 Oracle GoldenGate Delivery for Oracle, repa.prm: Using following columns in default map by
name: ID, CC_NAME, WITTIME, STATUS. 2020-08-27T15:58:29.960-0700 INFO OGG-06510 Oracle GoldenGate Delivery for Oracle, repa.prm: Using the following key columns for target
table BAK_YZ.D2: ID, CC_NAME, WITTIME, STATUS. 2020-08-27T15:58:29.969-0700 WARNING OGG-03060 Oracle GoldenGate Delivery for Oracle, repa.prm: Source column STATUS has more characters
than target column STATUS can hold. Some source characters will not be mapped during source column character validation of character set UTF-8. ······ Oracle 有告警,提示说字段超出表列长度,自己给忽略转换了。。。 assumetargetdefs 是以目标端表的列长度为准,所以才产生这种现象。可以理解!!!而非源端字段长度为准。

第二部分,测试 STREXT

那为了测试参数?STREXT 这个是拆分参数,但是也可以用于截取 target 提前准备修改参数,避免再次出现自动忽略导致的乌龙事件,那怎么测试。 MAP YZ.D2,TARGET BAK_YZ.D2,KEYCOLS(ID),COLMAP(ID=ID,WITTIME 1dfe =WITTIME,STATUS=STATUS,CC_NAME=@STREXT(CC_NAME,1,10)); 重启进程 source SQL> update d2 set CC_NAME='123456789012345' where id=6; SQL> commit; target SQL> desc d2 Name Null? Type ----------------------------------------- -------- ---------------------------- ID NUMBER(38) CC_NAME VARCHAR2(200) WITTIME TIMESTAMP(6) STATUS VARCHAR2(10) SQL> select id,cc_name from d2; ID CC_NAME ---------- -------------------- 6 1234567890
第三部分,测试 STRNCAT 

另一个参数设置 STRNCAT 整合参数,也可以用于截取 target 提前准备修改参数,避免再次出现自动忽略导致的乌龙事件,那怎么测试。
MAP YZ.D2,TARGET BAK_YZ.D2,KEYCOLS(ID),COLMAP(ID=ID,WITTIME=WITTIME,STATUS=STATUS,CC_NAME=@STRNCAT(CC_NAME,5));
重启进程

source
SQL> update d2 set CC_NAME='6543210' where id=6;
SQL> commit;

target
SQL> desc d2
Name Null? Type

----------------------------------------- -
ID NUMBER(38)
CC_NAME VARCHAR2(200)
WITTIME TIMESTAMP(6)
STATUS VARCHAR2(10)
SQL> select id,cc_name from d2;
ID CC_NAME
---------- --------
6 65432

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐