oracle死锁的检测及处理

来源:互联网 发布:真·假面骑士知乎 编辑:程序博客网 时间:2024/05/18 03:51

一. 死锁的检测

   --查死锁的会话。
select  A.sid, b.serial#,
 decode(A.type,
    'MR', 'Media Recovery',
    'RT','Redo Thread',
    'UN','User Name',
    'TX', 'Transaction',
    'TM', 'DML',
    'UL', 'PL/SQL User Lock',
    'DX', 'Distributed Xaction',
    'CF', 'Control File',
    'IS', 'Instance State',
    'FS', 'File Set',
    'IR', 'Instance Recovery',
    'ST', 'Disk Space Transaction',
    'TS', 'Temp Segment',
    'IV', 'Library Cache Invalida-tion',
    'LS', 'Log Start or Switch',
    'RW', 'Row Wait',
    'SQ', 'Sequence Number',
    'TE', 'Extend Table',
    'TT', 'Temp Table',
    'Unknown') LockType,
 c.object_name,
 b.username,
 b.osuser,
 decode(a.lmode,   0, 'None',
            1, 'Null',
            2, 'Row-S',
            3, 'Row-X',
            4, 'Share',
            5, 'S/Row-X',
            6, 'Exclusive', 'Unknown') LockMode,
 B.MACHINE,D.SPID ,b.PROGRAM
 from v$lock a,v$session b,all_objects c,V$PROCESS D
 where a.sid=b.sid and a.type in ('TM','TX')
 and c.object_id=a.id1
 AND B.PADDR=D.ADDR

二. 发生死锁后的处理方法

1. 9i以后的版本,oracle会自动检测死锁,检测到有死锁后会回滚或提交其中一个事务,使死锁消除.

2. ALTER SYSTEM KILL 'SID,SIEREL#' 注意:有可能产生两个会话SID为一样的情况,但seria是唯的,所以要用sid,seria标识一个会话.
3. KILL -9 PID

原创粉丝点击