在sql窗口中
1.查询当前所有死锁进程的编号
select xidusn, object_id, session_id, locked_mode from v$locked_object;
(2).所有进程编号
select username,sid,serial# from v$session;
(3)杀掉相关的死锁进程
alter system kill session 'sid,serial#';
(4)查询死锁oracle进程对应的系统进程
select pro.spid from v$session ses,v$process pro where ses.sid=129 and ses.paddr=pro.addr;
(5)杀掉系统进程
kill -9 pid
总结:
select pro.spid,loc.xidusn,loc.object_id,loc.session_id,loc.locked_mode from v$locked_object loc,v$session ses,v$process pro where ses.sid=loc.session_id and ses.paddr=pro.addr;
解决方法如下:
1:查V$DB_OBJECT_CACHE
SELECT * FROM V$DB_OBJECT_CACHE WHERE name='CUX_OE_ORDER_RPT_PKG' AND LOCKS!='0';
注意:CUX_OE_ORDER_RPT_PKG 为存储过程的名称。
发现 locks=2
2:按对象查出sid的值
select /*+ rule*/ SID from V$ACCESS WHERE object='CUX_OE_ORDER_RPT_PKG';
注意:CUX_OE_ORDER_RPT_PKG 为存储过程的名称。
3:查sid,serial#
SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='刚才查到的SID';
4:alter system kill session 'sid值,serial#值' immediate;
本文提供了一套完整的Oracle死锁排查及解决方案,包括查询死锁进程、获取系统进程信息及终止相关进程的方法,并通过具体步骤展示了如何定位并解决由特定存储过程引发的死锁。
552

被折叠的 条评论
为什么被折叠?



