OGG复制同步,提示字段长度不够ORA-01704
日常运维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的更多相关文章
- sqlite里执行查询提示未启用约束、主键冲突之——数据竟能超字段长度存储
数据表设计如图:szflbm为主键 数据表主键数据: 以上数据在查询时,执行到该语句adapter.Fill(table); 提示主键冲突. 解决: 1.尝试修改数据,把ZC1改成ZZ,正常.说明原因 ...
- 【OGG】RAC环境下配置OGG单向同步 (四)
[OGG]RAC环境下配置OGG单向同步 (四) 一.1 BLOG文档结构图 一.2 前言部分 一.2.1 导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的 ...
- OGG复制进程延迟高,优化方法一(使用索引)
日常运维过程中,可能发现OGG同步进程延迟很高: 本篇介绍其中的一种方式. OGG复制进程,或者说同步进程及通过解析ogg trail文件,输出dml语句,在目标库执行dml操作,那么延迟高可能性其一 ...
- OGG复制进程延迟高,优化方法二(存在索引),SQL选择不好的索引
https://www.cnblogs.com/lvcha001/p/13469500.html 接前序,本次场景中有索引,但是OGG复制进程使用了低效率的索引? 类似SQL使用低效索引,如何让Or ...
- 我的MYSQL学习心得(三) 查看字段长度
我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- Oracle中varchar2类型字段长度限制使用问题
为纪念中华人民共和国建军90周年,特此一篇,以此纪念,我军威武!!! 一.问题背景 项目中商品发布,却没有保存成功. 二.问题定位 初步判断向数据库中保存时出现了错误,查看日志文件,由于日志文件过大就 ...
- OGG实验:喂奶间隔数据表通过OGG配置同步
我之前在<使用SQL计算宝宝每次吃奶的时间间隔(数据保障篇)>中提到数据实时同步的方案,其中有一种是数据表通过OGG进行同步,当时没有详细展开测试,只给了之前学习OGG时的配置示例.由于之 ...
- mysql使用联合索引提示字符长度超限制解决办法
mysql在创建数据库的时候,字符集设置的不是utf8而是utf9mb4,在导入sql脚本的时候,发现提示如下错误: 从上图中,我们可以看出,使用的是innodb及字符集.错误提示是长度太长了 ...
- ABAP 动态备份自建表数据到新表(自建表有数据的情况下要改字段长度或者其他)
当abaper开发好一个程序给用户使用一段时间后,发现某个字段的长度需要修改,但数据库表中已经存在很多数据,冒然直接改表字段可能会导致数据丢失,这种问题的后果可能非常严重. 所以我想到先复制出一个新表 ...
随机推荐
- [草稿]基于 Virtuoso 环境比较便捷的项目文件及权限管理方案
https://www.cnblogs.com/yeungchie/ 假设如下情况: 1 项目名称 Project_01 2 包含 4 名研发用户,user01 和 user02 为前端工程师,use ...
- 7.11 NOI模拟赛 qiqi20021026的T1 四个指针莫队 trie树
LINK:qiqi20021026的T1 考场上只拿到了50分的\(nq\)暴力. 考虑一个区间和一个区间配对怎么做 二分图最大带权匹配复杂度太高. 先考虑LCS的问题 常见解决方法是后缀数组/tri ...
- dfs树
dfs树是解决图中带环的利器. 前天CF的F题就是dfs树,但是当时我没有认真思考 觉着找到一个环过于困难 当时没有想到 也没理解dfs树的意义. 对于一张无向图求出一个dfs树 这个树有两种边 树边 ...
- [SCOI2007]降雨量 线段树和区间最值(RMQ)问题
这道题是比较经典的 \(RMQ\) 问题,用线段树维护是比较简单好写的.比较难的部分是判断处理.如果没有想好直接打代码会调很久(没错就是我).怎么维护查询区间最大值我就不再这里赘述了,不懂线段树的 ...
- windows下使用redis命令行模式查询数据
背景:redis的火,就像java一样,对于测试人员来说,使用它就需要好好搞下,现在就整理下命令行模式,来查询获取自己想要的值: 命令行连接命令:redis-cli -h 主机名 -p 端口号 -a ...
- 【USACO02FEB】Rebuilding Roads 重建道路 题解(树形DP)
题目链接 题目大意:问使含有$p$个节点的子树分离至少需要去掉几条边. ------------------ 设$f[i][j]$表示以$i$为根的子树保留$j$个节点所去掉的最少边数. 初始化$f[ ...
- 关于saltstack的job问题
问题背景:搭建一个多节点后端集群,使用saltstack作为底层管理,使用Python封装saltstack接口成逻辑层.通过逻辑层的调用实现对整个集群的运维管理. 问题:随着项目中模块的增多,发现s ...
- C、C++、boost、Qt在嵌入式系统开发中的使用
概述 嵌入式系统开发相对来说属于偏底层的开发,也就是与硬件结合比较紧密,只能使用C/C++语言.对于做平台开发的人来说,C语言真的是很"古老"的语言,属于操作系统语言!好多人会觉得 ...
- 618购物节要到了,Python帮你实现商品有货的微信提醒
时间过的真快,不知不觉一年已过了一半,又快到618购物狂欢节了,剁手党们都希望无论是618购物节还是双11购物节,都能够买到便宜又实惠的商品,但是真心实惠的东西往往是紧俏的,经常会出现无货的情况,我们 ...
- java 多态一
一 多态的概述 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学 生也是人,即出现两种形态. Java作为面向对象的语言,同样可以描述一个事物的多种形态.如Studen ...