关于多个会话引起唯一键冲突
发生唯一键冲突时会发生TX锁争用,进程a执行insert后,若进程b执行insert会引发唯一键冲突,进程b要以shared 模式获取TX锁,
发生等待,进程b会等到进程a提交或者回滚为止,若进程a上完成提交,则b上出现ora-0001。若进程a完成了回滚,则进程b的insert成功完成。
Session A:
[@more@]
--关于多个会话引起唯一键冲突
发生唯一键冲突时会发生TX锁争用,进程a执行insert后,若进程b执行insert会引发唯一键冲突,进程b要以shared 模式获取TX锁,
发生等待,进程b会等到进程a提交或者回滚为止,若进程a上完成提交,则b上出现ora-0001。若进程a完成了回滚,则进程b的insert成功完成。
Session A:
SQL> create table test(id number,birthdate date);
Table created.
SQL> create unique index test_idx on test(id);
Index created.
SQL> insert into test values(1,sysdate);
1 row created.
Session B:
SQL> insert into test values(1,sysdate);
....
wait
Session C:
SQL> select (sysdate-a.logon_time)*24*60 minutes,
2 a.BLOCKING_SESSION,
3 a.sid,
4 a.serial#,
5 a.event,
6 a.p1,
7 a.p2,
8 a.p3,
9 a.sql_id
10 from v$session a, v$sql b
11 where
12 a.sql_address = b.address
13 and a.sql_hash_value = b.hash_value
14 and a.sql_child_number=b.child_number
15 and a.username like 'SH'
16 order by 1 desc;
MINUTES BLOCKING_SESSION SID SERIAL# EVENT P1 P2 P3
---------- ---------------- ---------- ---------- ------------------------- ---------- ---------- ----------
4.95 143 127 639 enq: TX - row lock conten 1415053316 655374 1232
tion
应用程序里面唯一键引起的TX锁争用可能发生,不过如果使用sequence的话就可以避免。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25586587/viewspace-1053999/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25586587/viewspace-1053999/