在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;