--=========================
外键引起的死锁:
rollback掉上面session 1和session 2中的sql
--=========================
session 1:
SQL> insert into r values(2);
已创建 1 行。
SQL>
--=======================
session 3:
SQL> select sid,type,id1,id2,lmode,request,ctime,block from v$lock where sid in
2 (159,128) order by sid;
SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK
---------- -- ---------- ---------- ---------- ---------- ---------- ----------
159 TM 13017 0 2 0 15 0
159 TX 393228 371 6 0 15 0
159 TM 13020 0 3 0 15 0
SQL>
--=======================
session 2:
SQL> insert into r values(2);
已创建 1 行。
SQL>
--=======================
session 3:
SQL> select sid,type,id1,id2,lmode,request,ctime,block from v$lock where sid in
2 (159,128) order by sid;
SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK
---------- -- ---------- ---------- ---------- ---------- ---------- ----------
128 TM 13017 0 2 0 14 0
128 TX 262168 360 6 0 14 0
128 TM 13020 0 3 0 14 0
159 TX 393228 371 6 0 55 0
159 TM 13020 0 3 0 55 0
159 TM 13017 0 2 0 55 0
已选择6行。
SQL>
--=======================
当我们向子表r中分别通过session 1和2插入数据时,此时发现在r表上家了锁mode是3,在主表
p上加的锁mode是2(RS: row share),此时别没有阻塞,接下来操作主表...
session 1:
SQL> delete from p where id=1;
阻塞...
session 3:
SQL> select sid,type,id1,id2,lmode,request,ctime,block from v$lock where sid in
2 (159,128) order by sid;
SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK
---------- -- ---------- ---------- ---------- ---------- ---------- ----------
128 TM 13017 0 2 0 332 0
128 TX 262168 360 6 0 332 0
128 TM 13020 0 3 0 332 1
159 TX 393228 371 6 0 373 0
159 TM 13020 0 3 5 373 0
159 TM 13017 0 3 0 29 0
已选择6行。
SQL>
从最后一个字段block=1发现session 1(sid:159)请求的锁mode 5被session 2(sid:128)加在子表(r)
上的3锁阻塞...(上面已经说了mode 3和5不能兼容);
oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html