导致死锁的SQL示例(二)

2014-11-24 14:50:36 · 作者: · 浏览: 1
e,id1,id2,lmode,request,block from v$lock where type in ('TM','TX') order by 1,2;
SID TY ID1 ID2 LMODE REQUEST BLOCK
---------- -- ---------- ---------- ---------- ---------- ----------
38 TM 76864 0 3 0 0
38 TX 327692 28225 0 4 0 ----违反主键约束产生的阻塞,所以申请的是4级锁而非6级。
38 TX 262157 27843 6 0 0
39 TM 76864 0 3 0 0
39 TX 327692 28225 6 0 1 --------会话39阻塞会话38,因为会话38事务未提交,处于未决状态。
6.手动解决38号会话的HANG住问题:
在会话39上提交
18:09:36 BYS@ bys001>commit;
Commit complete.
会话38的HANG住解决,报错如下:
18:08:09 BYS@ bys001>insert into test values(2);
insert into test values(2)
*
ERROR at line 1:
ORA-00001: unique constraint (BYS.PK__TEST_ID) violated
还可以直接在38号上CTRL+C取消语句的执行。
LOCK作用:独占业务资源 保证读一致性 维护事务完整性
LOCK宗旨:没有并发就没有锁,一个人操作数据库是不会产生锁的