日常运维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 xml_set_character_data_handler() 函数

    定义和用法 xml_set_character_data_handler() 函数为 XML 解析器建立字符数据处理器. 该函数规定当解析器在 XML 文件中找到字符数据时所调用的函数.高佣联盟 ww ...

  2. PHP mysqli_refresh() 函数

    定义和用法 mysqli_refresh() 函数刷新表或缓存,或者重置复制服务器信息.高佣联盟 www.cgewang.com 语法 mysqli_refresh(connection,option ...

  3. MOS 预夹断到底是什么

    https://www.cnblogs.com/yeungchie/ MOS管就像一个开关,栅极(Gate)决定源极(Souce)到漏极(Drain)的沟道(Channel)是开还是关.以NMOS为例 ...

  4. Blob分析之Board_Segmentation_Uncalib

    * ************************************************************************************************** ...

  5. 4.13 省选模拟赛 树 树形dp 卷积 NTT优化dp.

    考试的时候 看到概率 看到期望我就怂 推了一波矩阵树推自闭了 发现 边权点权的什么也不是. 想到了树形dp 维护所有边的断开情况 然后发现数联通块的和再k次方过于困难. 这个时候 应该仔细观察一下 和 ...

  6. 关于DateTimeOffset的爱恨情仇

    为什么要上DataTimeOffset?因为DateTime无法解决时区问题,经常需要时间戳转换日期,DateTimeOffset就是应运而生,数据格式储存了和UTC的时区差,C#几乎全几乎全版本支持 ...

  7. Qt 中十六进制字节流转换为Base64编码

    在Qt中,在网络通信时,有时需要将16进制字节流转换为Base64编码传输,在Qt的QByteArray类中,提供了与Base64转换的接口: //16进制字节流转为Base64 QByteArray ...

  8. PHP入门之数组

    前言 之前几篇文章分别介绍了PHP的运算符,流程控制,函数.有兴趣的可以去看看. PHP入门之类型与运算符 PHP入门之流程控制 PHP入门之函数 接下来简单介绍一下数组. 数组初探 为什么要引进数组 ...

  9. C#LeetCode刷题-链表

    链表篇 # 题名 刷题 通过率 难度 2 两数相加   29.0% 中等 19 删除链表的倒数第N个节点   29.4% 中等 21 合并两个有序链表 C#LeetCode刷题之#21-合并两个有序链 ...

  10. 旧 WCF 项目迁移到 asp.net core + gRPC 的尝试

    一个月前,公司的运行WCF的windows服务器down掉了,由于 AWS 没有通知,没有能第一时间发现问题. 所以,客户提出将WCF服务由C#改为JAVA,在Linux上面运行:一方面,AWS对Li ...