日常运维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. Django学习路22_empty为空,forloop.counter 从1计数,.counter0 从0计数 .revcounter最后末尾数字是1,.revcounter0 倒序,末尾为 0

    当查找的数据不存在,返回为 空时 在 html 中使用 {%empty%} 语句 进行显示 def getstudents(request): students = Student.objects.a ...

  2. PHP image_type_to_extension - 获取图片后缀

    image_type_to_extension — 根据指定的图像类型返回对应的后缀名.高佣联盟 www.cgewang.com 语法 string image_type_to_extension ( ...

  3. PHP getNamespaces() 函数

    实例 返回 XML 文档中使用的命名空间: <?php$xml=<<<XML高佣联盟 www.cgewang.com<?xml version="1.0&quo ...

  4. HDU Typewriter 6583 dp SAM 卡常

    LINK:Typewriter 好久没写SAM了 什么都给忘了. 写了大概2h.感觉被卡常还看了题解. 考虑dp 然后容易想到维护前面的一个j决策 尽可能小. 然后每次考虑向后加一个字符 不过不行就跳 ...

  5. ElasticSearch学习中的坑

    elasticsearch 版本为 6.8.2 1 安装完启动报错:   解决,建立新用户执行 [root@localhost bin]# ./elasticsearch [2019-09-01T05 ...

  6. SQL优化之博客案例

    问题背景:博客首页随着数据量的增加,最初是几百上千的数据,访问正常,这是开发环境,当切换测试环境(通过爬虫已有数据六万多),这时候访问非常缓慢,长达一分钟. 问题SQL: SELECT DISTINC ...

  7. 好用的连接池-druid

    druid连接池是阿里巴巴的数据库连接池项目.它的一个亮点强大的监控功能以及防SQL注入,同时不影响性能.这里是它的GitHub地址.感觉druid扩展的功能还是很实用的. 实用的功能 详细的监控 E ...

  8. 实验02——java两个数交换的三种解决方案

    package cn.tedu.demo;/** * @author 赵瑞鑫      E-mail:1922250303@qq.com * @version 1.0* @创建时间:2020年7月16 ...

  9. 00-java语言概述

    1.基础常识软件:即一系列按照特定顺序组织的计算机数据和指令的集合.分为:系统软件 和 应用软件 系统软件:windows , mac os , linux ,unix,android,ios,... ...

  10. Python使用Tornado+Redis维护ADSL拨号服务器代理池

    们尝试维护过一个免费的代理池,但是代理池效果用过就知道了,毕竟里面有大量免费代理,虽然这些代理是可用的,但是既然我们能刷到这个免费代理,别人也能呀,所以就导致这个代理同时被很多人使用来抓取网站,所以当 ...