作者: mqxiao07(http://mqxiao07.itpub.net)
发表于:2006.09.18 10:41
分类:
ORACLE出处:http://mqxiao07.itpub.net/post/27303/247023
---------------------------------------------------------------
1、背景情况
2006-9-15日、17日数据库出现好几次死锁,在alert*.log中出现ORA-000060错误,(ORA-000060: Deadlock detected),造成应用服务器发生阻塞。
2、系统情况
Platform. 64-bit solaris
Oracle 9.2.0.4
3、解决过程
A、--查看等待事件情况,有大量的enqueue。
select p.spid pid,s.sid,s.SERIAL#,s.username,event,
w.p1,w.P1TEXT,w.p2,w.P2TEXT,w.p3,w.P3TEXT,sq.SQL_TEXT,w.WAIT_TIME,
w.SECONDS_IN_WAIT,w.STATE
from v$session_wait w,v$session s ,v$process p,v$sql sq
where event not like 'SQL%' and w.sid=s.sid and s.paddr=p.addr
and s.SQL_ADDRESS=sq.ADDRESS and s.SQL_HASH_VALUE=sq.HASH_VALUE
B、--查看锁情况,发现很多session在等待object_id为44101的锁,而sid为761的session持有该锁。
SELECT lpad(' ',DECODE(request,0,0,1))||sid sess, id1, id2, lmode, request, type
FROM V$LOCK
WHERE id1 IN (SELECT id1 FROM V$LOCK WHERE lmode = 0)
ORDER BY id1,request
C、--取得sid为761的session的情况
select p.spid,s.* from v$session s ,v$process p where s.paddr=p.addr and S.sid in (761)
D、--杀掉761session
alter system kill session '761,29212';
E、--类似情况出现过好多次,处理情况与此相同。
F、--同开发人员联系,调整应用,及时commit或rollback。
问题解决。