因OGG同步运行时,修改了数据库结构后,会报错,以下为我整理的处理方法:
最近正在OGG维护的过程中启动REPLICAT 后报错
WARNING OGG-00869:OCI Error ORA-01400: cannot insert NULL into (“F4ERP”.”BILL_RETAIL”.”P0670_ID”) (status = 1400)
ERROR OGG-01296:Error mapping from F4ERP.BILL_RETAIL to F4ERP.BILL_RETAIL.
经过度娘分析后,确认为数据表结构的问题,但我的源端和目标端的表结构完全一致(因为是同一个脚本建的),度娘的建议和我处理的方法如下:
一、标准的处理流程
如果发现用户 view report REPLICAT RPBSS309 中报错的语句 cannot insert NULL into中的字段和目标库不一致,可以使用以下方式
(1)将报错的同步表在源端和目标端都注销掉,将同步表注销掉,并重启进程,既将表结构变化后,将错误同步的数据跳过
edit param REPLICAT RPBSS309
–MAPF4ERP.BILL_RETAIL, TF4ERP.BILL_RETAIL KEYCOLS
edit param EXTRACT doS309
— table PORTAL.SALES_PARTY_EXT;
(2)源端增加表
源端执行
dblogin USERID ggs, PASSWORD XXX
delete trandata PORTAL.SALES_PARTY_EXT
add trandata PORTAL.SALES_PARTY_EXT
(3)停目标端
目标端增加表
目标端执行
dblogin USERID ogg, password XXX
delete trandata BSSPDATA.SALES_PARTY_EXT
add trandata BSSPDATA.SALES_PARTY_EXT
起源端
起目标端
二、指定表的主键进行同步
stop RPBSS309
edit param REPLICAT RPBSS309
修改为MAP F4ERP.BILL_RETAIL, TF4ERP.BILL_RETAIL KEYCOLS(USER_ID);
start RPBSS309
我的问题仍然没有解决
三、经过分析应该还是出在表结构的问题上,经过核查发现我的源端的 主键建立脚本如下:
alter table SERV_CUSTTYPE_INFO
add primary key (L_SERV_ID, MODIDATA)
tablespace ORDDB_DATA;
而其他正常同步数据表的为
alter table SERV_CUSTTYPE_INFO
add primary key (L_SERV_ID, MODIDATA)
using index
tablespace ORDDB_DATA;
少了一个using index ,加上using index 后重新建主端和备端的主键后问题解决
alter table SERV_CUSTTYPE_INFO drop primary key;
alter table SERV_CUSTTYPE_INFO
add primary key (L_SERV_ID, MODIDATA)
using index
tablespace ORDDB_DATA;