2端字段都有NOT NULL约束,同步时目标端报错
OCI Error ORA-01400: cannot insert NULL into ("SCOTT
"."OGG_TEST_NULL"."NAME") (status = 1400). INSERT INTO "SCOTT"."OGG_TEST_NULL" ("ID") VALUES (:a0)
1、(这条可以忽略)针对源端字段设置了default值,目标端未设置,且都是NOT NULL,源端insert不插入该列,目标端是可以将源端那个default值同步过来,且不报错。
2、重现了一下,如果目标端复制进程使用了HANDLECOLLISIONS参数,源端的update,如果where条件里面的主键在目标库中找不到,会将update变为insert,这时如果有其他字段有NOT NULL约束就会报错OCI Error ORA-01400: cannot insert NULL into。
测试方法:先同步一条数据过来,然后手动在目标端删除这条数据,并在复制进程中加HANDLECOLLISIONS参数,然后在源端执行一条update语句(update非NOT NULL列,且WHERE条件中也为非NOT NULL列),这时目标端就会报错OCI Error ORA-01400: cannot insert NULL into ("SCOTT
"."OGG_TEST_NULL"."NAME") (status = 1400). INSERT INTO "SCOTT"."OGG_TEST_NULL" ("ID") VALUES (:a0)。
部分测试过程如下:
--首先初始化并同步一条数据
源端
[code]SQL> conn awen/oracle
Connected.
SQL> create table ogg_test_null(id number primary key,name varchar2(20) DEFAULT 'Steven' NOT NULL);
Table created.
SQL> insert into ogg_test_null (id) values (1000);
1 row created.
SQL> commit;
Commit complete.[/code]
目标端
[code]SQL> conn scott/oracle
Connected.
SQL> create table ogg_test_null(id number primary key,name varchar2(20) not null);
Table created.
SQL> select * from ogg_test_null;
ID NAME
---------- --------------------
1000 Steven[/code]
--手动删除目标端数据,并加上HANDLECOLLISIONS参数,源端执行update
目标端
[code]SQL> delete from ogg_test_null;
1 row deleted.
SQL> commit;
Commit complete.[/code]
源端
[code]SQL> update ogg_test_null set id=2000 where id=1000;
1 row updated.
SQL> commit;
Commit complete.[/code]
这时目标端复制进程报错:
[code]2013-12-26 10:14:47 WARNING OGG-00869 OCI Error ORA-01400: cannot insert NULL into ("SCOTT"."OGG_TEST_NULL"."NAME") (status = 1400). INSERT INTO "SCOTT"."OGG_TEST_NU
LL" ("ID") VALUES (:a0).
2013-12-26 10:14:47 WARNING OGG-01004 Aborted grouped transaction on 'SCOTT.OGG_TEST_NULL', Database error 1400 (OCI Error ORA-01400: cannot insert NULL into ("SCOTT
"."OGG_TEST_NULL"."NAME") (status = 1400). INSERT INTO "SCOTT"."OGG_TEST_NULL" ("ID") VALUES (:a0)).
2013-12-26 10:14:47 WARNING OGG-01003 Repositioning to rba 1746 in seqno 8.
2013-12-26 10:14:47 WARNING OGG-01154 SQL error 1400 mapping AWEN.OGG_TEST_NULL to SCOTT.OGG_TEST_NULL OCI Error ORA-01400: cannot insert NULL into ("SCOTT"."OGG_TES
T_NULL"."NAME") (status = 1400). INSERT INTO "SCOTT"."OGG_TEST_NULL" ("ID") VALUES (:a0).[/code]
OCI Error ORA-01400: cannot insert NULL into ("SCOTT
"."OGG_TEST_NULL"."NAME") (status = 1400). INSERT INTO "SCOTT"."OGG_TEST_NULL" ("ID") VALUES (:a0)
1、(这条可以忽略)针对源端字段设置了default值,目标端未设置,且都是NOT NULL,源端insert不插入该列,目标端是可以将源端那个default值同步过来,且不报错。
2、重现了一下,如果目标端复制进程使用了HANDLECOLLISIONS参数,源端的update,如果where条件里面的主键在目标库中找不到,会将update变为insert,这时如果有其他字段有NOT NULL约束就会报错OCI Error ORA-01400: cannot insert NULL into。
测试方法:先同步一条数据过来,然后手动在目标端删除这条数据,并在复制进程中加HANDLECOLLISIONS参数,然后在源端执行一条update语句(update非NOT NULL列,且WHERE条件中也为非NOT NULL列),这时目标端就会报错OCI Error ORA-01400: cannot insert NULL into ("SCOTT
"."OGG_TEST_NULL"."NAME") (status = 1400). INSERT INTO "SCOTT"."OGG_TEST_NULL" ("ID") VALUES (:a0)。
部分测试过程如下:
--首先初始化并同步一条数据
源端
[code]SQL> conn awen/oracle
Connected.
SQL> create table ogg_test_null(id number primary key,name varchar2(20) DEFAULT 'Steven' NOT NULL);
Table created.
SQL> insert into ogg_test_null (id) values (1000);
1 row created.
SQL> commit;
Commit complete.[/code]
目标端
[code]SQL> conn scott/oracle
Connected.
SQL> create table ogg_test_null(id number primary key,name varchar2(20) not null);
Table created.
SQL> select * from ogg_test_null;
ID NAME
---------- --------------------
1000 Steven[/code]
--手动删除目标端数据,并加上HANDLECOLLISIONS参数,源端执行update
目标端
[code]SQL> delete from ogg_test_null;
1 row deleted.
SQL> commit;
Commit complete.[/code]
源端
[code]SQL> update ogg_test_null set id=2000 where id=1000;
1 row updated.
SQL> commit;
Commit complete.[/code]
这时目标端复制进程报错:
[code]2013-12-26 10:14:47 WARNING OGG-00869 OCI Error ORA-01400: cannot insert NULL into ("SCOTT"."OGG_TEST_NULL"."NAME") (status = 1400). INSERT INTO "SCOTT"."OGG_TEST_NU
LL" ("ID") VALUES (:a0).
2013-12-26 10:14:47 WARNING OGG-01004 Aborted grouped transaction on 'SCOTT.OGG_TEST_NULL', Database error 1400 (OCI Error ORA-01400: cannot insert NULL into ("SCOTT
"."OGG_TEST_NULL"."NAME") (status = 1400). INSERT INTO "SCOTT"."OGG_TEST_NULL" ("ID") VALUES (:a0)).
2013-12-26 10:14:47 WARNING OGG-01003 Repositioning to rba 1746 in seqno 8.
2013-12-26 10:14:47 WARNING OGG-01154 SQL error 1400 mapping AWEN.OGG_TEST_NULL to SCOTT.OGG_TEST_NULL OCI Error ORA-01400: cannot insert NULL into ("SCOTT"."OGG_TES
T_NULL"."NAME") (status = 1400). INSERT INTO "SCOTT"."OGG_TEST_NULL" ("ID") VALUES (:a0).[/code]
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




