一直以为,当插入记录违反唯一键约束时,最多会提示错误,怎么也想不到会锁住。
今天在工作中发生了死锁问题,最后发现这是由于唯一键造成的。
下面做个测试:
create table test ( id number unique);
session 1:
SQL> insert into test_unique values(1);
1 row created.
没有提交
然后打开session 2:
SQL> insert into test_unique values(1);
就这样session 2就被session 1锁住了。
SQL> select * from dba_waiters;
WAITING_SESSION HOLDING_SESSION LOCK_TYPE MODE_HELD
--------------- --------------- -------------------------- ----------------------------------------
MODE_REQUESTED LOCK_ID1 LOCK_ID2
---------------------------------------- --------- ---------
161 162 Transaction Exclusive
Share 65571 41479
session 1:
SQL> commit;
Commit complete.
session 2:
insert into test_unique values(1)
*
ERROR at line 1:
ORA-00001: unique constraint (DBOWN.SYS_C0039088) violated
不明白为什么不直接错误ora-00001呢?或许这是10.1的bug都不一定。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13387766/viewspace-611826/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/13387766/viewspace-611826/