ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 外键引起的锁

外键引起的锁

原创 Linux操作系统 作者:wadekobe9 时间:2012-04-12 16:11:20 0 删除 编辑

环境:

emp上面有外键FK_deptno,它参考了dept表上的dpetno列,在oracle  10g  R2

 

以下会话按顺序执行

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

会话1

Select  Userenv('SID'From  dual  --144

 

首先给emp6级锁

Lock  Table  scott.emp  In  Exclusive  Mode

 

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

会话2

Select  Userenv('SID'From  dual  --151

 

下面删除emp操作时阻塞了

Delete  From  scott.emp             

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

会话3

Select  Userenv('SID'From  dual  --112

 

下面更新dept表的deptno字段时候出现阻塞了

Update    scott.dept  Set  deptno=39  Where  deptno=30

 

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

会话4

Select  Userenv('SID'From  dual  --116

 

下面更新dept表的dname字段(非外键涉及的字段),能成功更新并且提交。

Update    scott.dept  Set  dname='KKK'  Where  deptno=30 

 

 

 

另起会话

SQLselect  *  From  v$lock  Where  Sid  In(144,151,112order  by  sid;

 

ADDR                          KADDR                                      SID  TYPE                ID1                ID2            LMODE        REQUEST            CTIME            BLOCK

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

00000000D941FEB0  00000000D941FED8                112  TM                51151                    0                    0                    4                790                    0

00000000D941FDB0  00000000D941FDD8                112  TM                51149                    0                    3                    0                790                    0

00000000D941FAB0  00000000D941FAD8                144  TM                51151                    0                    6                    0              1126                    1

00000000DAE62B48  00000000DAE62CD0                144  TX              589856            26294                    6                    0              1126                    0

00000000D941FBB0  00000000D941FBD8                151  TM                51149                    0                    2                    0              1111                    0

00000000D941FCB0  00000000D941FCD8                151  TM                51151                    0                    0                    3              1111                    0

 

ID20时,ID1为对象号

 

Select  *  From  dba_objects  aa  Where  aa.object_name='EMP'    --51151

Select  *  From  dba_objects  aa  Where  aa.object_name='DEPT'  --51149

 

 

结论:在更新dept表的deptno时,需要向emp上面加4级锁S,4级锁和3,5,6级锁冲突。emp表上

在第一部已经加了6级锁了。

 

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

请登录后发表评论 登录
全部评论

注册时间:2010-11-30

  • 博文量
    36
  • 访问量
    56688