ITPub博客

首页 > 数据库 > Oracle > [20190218]延迟约束问题2.txt

[20190218]延迟约束问题2.txt

原创 Oracle 作者:lfree 时间:2019-02-18 09:05:41 0 删除 编辑

[20190218]延迟约束问题2.txt


--//当时遇到的问题,链接如下:

http://blog.itpub.net/267265/viewspace-2122166/ => [20160716]主外键与延迟约束.txt 

http://blog.itpub.net/267265/viewspace-2122204/ => [20160719]主外键与延迟约束2.txt 

 

--//其它例子:

http://blog.itpub.net/267265/viewspace-2138946/ => [20170512]延迟约束问题.txt 


--//当时因为开发没有在2个存在主外键上的表上建立约束,导致主表记录删除了,而外表数据还在.

--//主要问题在于开发有需求要删除主表的记录,由于条件写错,导致出现以上情况.

--//实际上oracle支持延迟约束,只有提交的时候才会检查。 我当时也很无奈,明显开发写代码有问题

--//什么能选择删除主记录,然后再插入回去这样的编程方式。

--//实际上查找这个问题就花了整整一天时间,确定恢复时间又花不少时间,恢复数据库到特定时间点又是一天。

--//更加严重事后根本没有总结,更谈不上更正编程方式。


--//实际上使用延迟约束,我个人认为更使用触发器一样,都不是很好的编程模式,再通过一个说明问题:


1.环境:


SCOTT@book> @ ver1

PORT_STRING                    VERSION        BANNER

------------------------------ -------------- --------------------------------------------------------------------------------

x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production


create table t(id number);

alter table t add constraint pk_t primary key (id) deferrable initially deferred ;

insert into t values (1);

insert into t values (2);

commit ;


2.测试:

--//session 1:

SCOTT@book(274,5)> insert into t values (1);

1 row created.


SCOTT@book(274,5)> commit ;

commit

*

ERROR at line 1:

ORA-02091: transaction rolled back

ORA-00001: unique constraint (SCOTT.PK_T) violated


--//插入没有问题,但是提交会报错。因为违反唯一性约束,这时延迟约束的特点.继续测试:


--//session 1:

SCOTT@book(274,5)> update t set id=3 where id=2;

1 row updated.


--//session 2:

SCOTT@book(41,19)> update t set id=3 where id<=2;


--//挂起!!因为修改都包括id=2的记录.


--//session 1:

SCOTT@book(274,5)> commit ;

Commit complete.


--//session 2:

SCOTT@book(41,19)> update t set id=3 where id<=2;

1 row updated.

--//注意仅仅修改1条。


SCOTT@book(41,19)> commit ;

Commit complete.


SCOTT@book(41,19)> select * from t;

        ID

----------

         3

         3


--//破坏了唯一性约束.

--//在12.2.0.2(for windows 64位)下测试结果也一样。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/267265/viewspace-2636215/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    2859
  • 访问量
    6646229