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

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

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

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

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

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

source
SQL> desc d1
STATUS VARCHAR2()
SQL> select ID,STATUS from d1;
ID STATUS
---------- ---------- SQL> alter table d1 modify STATUS VARCHAR2();
SQL> update d1 set status='' where id=;
SQL> commit;
target
GGSCI (t2) > info all
REPLICAT ABENDED REPA :: ::
GGSCI (t2) > view report repa
-- :: ERROR OGG- Bad column length () specified for column STATUS in table YZ.D1, maximum allowable length is . 修改字段类型
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
---------- -------------------- ---------- alter table d1 drop column status_old; 可选
trim函数从字符串的开头或结尾删除所有指定的字符 SQL> desc d1
STATUS CLOB GGSCI (t2) > start repa 再次启动报错
-- :: ERROR OGG- Bad column length () specified for column STATUS in table YZ.D1, maximum allowable length is .
-- :: INFO OGG- Using following columns in default map by name: ID, CC_NAME, WITTIME, STATUS1, STATUS.
-- :: INFO OGG- Using the following key columns for target table BAK_YZ.D1: ID, CC_NAME, WITTIME, STATUS1.
GGSCI (t2) > 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
---------- --------------------

小结: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, , ),
PREFIX = @STREXT (PHONE, , ),
PHONE_NO = @STREXT (PHONE, , ) @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', , '', )

测试

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

source
SQL> alter table d2 modify status varchar2();
SQL> update d2 set status='' where id=;
SQL> commit; target
SQL> desc d2
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER()
CC_NAME VARCHAR2()
WITTIME TIMESTAMP()
STATUS VARCHAR2()
SQL> select id,status from d2;
ID STATUS
---------- -------------------- assumetargetdefs --27T15::29.959- WARNING OGG- 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.
--27T15::29.960- INFO OGG- Oracle GoldenGate Delivery for Oracle, repa.prm: The definition for table YZ.D2 is obtained
from the trail file.
--27T15::29.960- INFO OGG- Oracle GoldenGate Delivery for Oracle, repa.prm: Using following columns in default map by
name: ID, CC_NAME, WITTIME, STATUS.
--27T15::29.960- INFO OGG- Oracle GoldenGate Delivery for Oracle, repa.prm: Using the following key columns for target
table BAK_YZ.D2: ID, CC_NAME, WITTIME, STATUS.
--27T15::29.969- WARNING OGG- 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-.
······
Oracle 有告警,提示说字段超出表列长度,自己给忽略转换了。。。
assumetargetdefs 是以目标端表的列长度为准,所以才产生这种现象。可以理解!!!而非源端字段长度为准。 第二部分,测试 STREXT
那为了测试参数?STREXT 这个是拆分参数,但是也可以用于截取
target
提前准备修改参数,避免再次出现自动忽略导致的乌龙事件,那怎么测试。
MAP YZ.D2,TARGET BAK_YZ.D2,KEYCOLS(ID),COLMAP(ID=ID,WITTIME=WITTIME,STATUS=STATUS,CC_NAME=@STREXT(CC_NAME,,));
重启进程 source
SQL> update d2 set CC_NAME='' where id=;
SQL> commit; target
SQL> desc d2
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER()
CC_NAME VARCHAR2()
WITTIME TIMESTAMP()
STATUS VARCHAR2()
SQL> select id,cc_name from d2;
ID CC_NAME
---------- --------------------
第三部分,测试 STRNCAT 

另一个参数设置 STRNCAT 整合参数,也可以用于截取 target 提前准备修改参数,避免再次出现自动忽略导致的乌龙事件,那怎么测试。
MAP YZ.D2,TARGET BAK_YZ.D2,KEYCOLS(ID),COLMAP(ID=ID,WITTIME=WITTIME,STATUS=STATUS,CC_NAME=@STRNCAT(CC_NAME,));
重启进程 source
SQL> update d2 set CC_NAME='' where id=;
SQL> commit; target
SQL> desc d2
Name Null? Type ----------------------------------------- -
ID NUMBER()
CC_NAME VARCHAR2()
WITTIME TIMESTAMP()
STATUS VARCHAR2()
SQL> select id,cc_name from d2;
ID CC_NAME
---------- --------
65432

OGG复制同步,提示字段长度不够ORA-01704的更多相关文章

  1. sqlite里执行查询提示未启用约束、主键冲突之——数据竟能超字段长度存储

    数据表设计如图:szflbm为主键 数据表主键数据: 以上数据在查询时,执行到该语句adapter.Fill(table); 提示主键冲突. 解决: 1.尝试修改数据,把ZC1改成ZZ,正常.说明原因 ...

  2. 【OGG】RAC环境下配置OGG单向同步 (四)

    [OGG]RAC环境下配置OGG单向同步 (四) 一.1  BLOG文档结构图 一.2  前言部分 一.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的 ...

  3. OGG复制进程延迟高,优化方法一(使用索引)

    日常运维过程中,可能发现OGG同步进程延迟很高: 本篇介绍其中的一种方式. OGG复制进程,或者说同步进程及通过解析ogg trail文件,输出dml语句,在目标库执行dml操作,那么延迟高可能性其一 ...

  4. OGG复制进程延迟高,优化方法二(存在索引),SQL选择不好的索引

    https://www.cnblogs.com/lvcha001/p/13469500.html 接前序,本次场景中有索引,但是OGG复制进程使用了低效率的索引?  类似SQL使用低效索引,如何让Or ...

  5. 我的MYSQL学习心得(三) 查看字段长度

    我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  6. Oracle中varchar2类型字段长度限制使用问题

    为纪念中华人民共和国建军90周年,特此一篇,以此纪念,我军威武!!! 一.问题背景 项目中商品发布,却没有保存成功. 二.问题定位 初步判断向数据库中保存时出现了错误,查看日志文件,由于日志文件过大就 ...

  7. OGG实验:喂奶间隔数据表通过OGG配置同步

    我之前在<使用SQL计算宝宝每次吃奶的时间间隔(数据保障篇)>中提到数据实时同步的方案,其中有一种是数据表通过OGG进行同步,当时没有详细展开测试,只给了之前学习OGG时的配置示例.由于之 ...

  8. mysql使用联合索引提示字符长度超限制解决办法

    ​ mysql在创建数据库的时候,字符集设置的不是utf8而是utf9mb4,在导入sql脚本的时候,发现提示如下错误: ​ 从上图中,我们可以看出,使用的是innodb及字符集.错误提示是长度太长了 ...

  9. ABAP 动态备份自建表数据到新表(自建表有数据的情况下要改字段长度或者其他)

    当abaper开发好一个程序给用户使用一段时间后,发现某个字段的长度需要修改,但数据库表中已经存在很多数据,冒然直接改表字段可能会导致数据丢失,这种问题的后果可能非常严重. 所以我想到先复制出一个新表 ...

随机推荐

  1. 问题记录,php webserver端跨子域setcookie后浏览器不存

    如题. path已设置成/,domain也已指定成父级域名,数据包response中可见Set-Cookie header为期望的cookie数据,但浏览器就是不接收.存储该cookie, 浏览器端也 ...

  2. MySQL的utf8问题

    作者:brightwang 原文:https://www.jianshu.com/p/ab9aa8d4df7d 有时候用MySQL存储一些特殊字符时,有出现乱码问题. 我用的是UTF-8编码的客户端, ...

  3. ASP.NET中使用Cache类来缓存页面的信息

    实现 如果将数据保存在全局应用程序对象Application中,值将会在程序运行时一直存在,而我们只需要缓存一段时间. ASP.NET提供了一个Cache对象来执行对象数据的缓存. Cache对象是S ...

  4. Error: Cannot perform an interactive login from a non TTY device

    zhangjiawen@zhangjiawen-PC MINGW64 /d/Docker Toolbox$ docker login --username=绝世随机变量 registry.cn-han ...

  5. Springboot+Mybatis+Clickhouse+jsp 搭建单体应用项目(三)(添加增删改查)

    一.添加增加接口 @ApiResponses(value = { @ApiResponse(code = 200, message = "接口返回成功状态"), @ApiRespo ...

  6. GPS位置显示在地图上

    源码分析博客地址:https://blog.csdn.net/wuquan_1230/article/details/79614974 工具下载地址:http://download.csdn.net/ ...

  7. idea括号选中时出现一条下滑线(突出显示)打开或关闭方法

    打开设置 Editor->code Editing->Matched brace取消这个对勾

  8. 简化RESTful开发,Spring Data REST让你少掉发

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! 前言 Springboot + Spring MVC大大简化了Web应用的RESTful开发,而Spring Data RE ...

  9. layui 事件监听触发

    1:监听select 改变 <!-- 不用form 用div也可以 --> <form class="layui-form"> <div class= ...

  10. 盘点 35 个 Apache 顶级项目,我拜服了…

    Apache 软件基金会 Apache 软件基金会,全称:Apache Software Foundation,简称:ASF,成立于 1999 年 7 月,是目前世界上最大的最受欢迎的开源软件基金会, ...