• 同一张表不同SESSION相互持有对方记录引发的死锁


    锁产生的原因:如果有两个会话,每个会话都持有另一个会话想要的资源,此时就会发生死锁。 
    同一张表不同SESSION持有不同记录
    SQL> create table t1(id int);
    
    Table created.
    
    
    
    SQL> create table t2(id int);
    
    Table created.
    
    
    
    SQL> select * from t1;
    
    	ID
    ----------
    	 1
    	 2
    
    SQL> select * from t2;
    
    	ID
    ----------
    	 2
    	 1
    
    
    开始测试:
    
    SESSION 1:
    SQL> select * from v$mystat where rownum<2;
    
           SID STATISTIC#	   VALUE
    ---------- ---------- ----------
    	48	    0	       0
    
    SESSION 2:
    SQL> select * from v$mystat where rownum<2;
    
           SID STATISTIC#	   VALUE
    ---------- ---------- ----------
    	38	    0	       0
    
    SQL> select * from v$lock where sid in (48,38) and type in ('TM','TX');
    
    no rows selected
    
    SESSION 1:
    SQL> update t1 set id=3 where id=1;
    
    1 row updated.
    
    
    SESSION 2:
    
    SQL>  update t1 set id=4 where id=2;
    
    1 row updated.
    
    查看此时行锁情况:
    SQL>  select * from v$lock where sid in (48,38) and type in ('TM','TX');
    
    ADDR	 KADDR		 SID TY        ID1	  ID2	   LMODE    REQUEST	 CTIME	    BLOCK
    -------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
    006EBE84 006EBEB4	  48 TM      76908	    0	       3	  0	    33		0
    006EBE84 006EBEB4	  38 TM      76908	    0	       3	  0	    15		0
    336F4CB0 336F4CF0	  48 TX     327711	12767	       6	  0	    33		0
    331415AC 331415EC	  38 TX     262152	12576	       6	  0	    15		0
    
    
    SESSION 1:
    SQL>  update t1 set id=4 where id=2;
    此时SESSION 1HANG住:
    
    查看此时行锁信息:
    SQL> select * from v$lock where sid in (48,38) and type in ('TM','TX');
    
    ADDR	 KADDR		 SID TY        ID1	  ID2	   LMODE    REQUEST	 CTIME	    BLOCK
    -------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
    3500122C 35001258	  48 TX     262152	12576	       0	  6	    17		0
    006EBE84 006EBEB4	  48 TM      76908	    0	       3	  0	    68		0
    006EBE84 006EBEB4	  38 TM      76908	    0	       3	  0	    50		0
    336F4CB0 336F4CF0	  48 TX     327711	12767	       6	  0	    68		0
    331415AC 331415EC	  38 TX     262152	12576	       6	  0	    50		1
    
    SESSION 2执行:
     update t1 set id=3 where id=1;
    
    
    此时SESSION1报:
    SQL>  update t1 set id=4 where id=2;
     update t1 set id=4 where id=2
            *
    ERROR at line 1:
    ORA-00060: deadlock detected while waiting for resource
    
    ------------------------------------------------------------------------
    
    
    SESSION 1(48):
    SQL> update t1 set id=3 where id=1;
    
    1 row updated.
    
    SQL>  update t1 set id=4 where id=2;
     update t1 set id=4 where id=2
            *
    
    ERROR at line 1:
    ORA-00060: deadlock detected while waiting for resource
    
    
    SESSION 2 (38):
    
    SQL>  update t1 set id=4 where id=2;
    
    1 row updated.
    
     update t1 set id=3 where id=1;
    
    
    查看trace 文件信息:
    
    
    Session 38:
      sid: 38 ser: 190 audsid: 1440036 user: 91/TEST flags: 0x45
      pid: 27 O/S info: user: oracle, term: UNKNOWN, ospid: 5535
        image: oracle@june (TNS V1-V3)
      client details:
        O/S info: user: oracle, term: pts/3, ospid: 5534
        machine: june program: sqlplus@june (TNS V1-V3)
        application name: SQL*Plus, hash value=3669949024
      current SQL:
       update t1 set id=3 where id=1
     
    ----- End of information for the OTHER waiting sessions -----    
     
    Information for THIS session:
     
    ----- Current SQL Statement for this session (sql_id=2377z63nmj7ps) -----
     update t1 set id=4 where id=2
    
    
    
    
    
    


     

  • 相关阅读:
    AD中各层的说明
    Altium designer的PCB设计规则
    python 的基础 学习 第三天 编码的初始
    python 的基础 学习 第三
    python的基础初始第二天
    python 的基础 学习 第一天
    Liunx ls命令
    Liunx cd命令
    CentOS 7系统关闭yum自动下载更新
    【转】XenServer体系架构解析
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13352422.html
Copyright © 2020-2023  润新知