ORACLE中殺死鎖程式的方法

itpub120發表於2006-11-22

步驟一:查詢試圖,找出sid
Select Distinct a.session_id From Dba_Ddl_Locks a
Where a.name=upper('t_sqlload_tmp');

如果不知道被鎖的物件,可以用如下語句查詢:

SELECT b.owner,b.object_name,b.object_type,b.object_id
FROM
dba_Objects b
WHERE b.OBJECT_ID IN ( SELECT DISTINCT a.object_id FROM v$locked_object a);

從中發現有個自己在用的物件被鎖了,根據object_id執行如下的sql語句:

SELECT S.SID SESSION_ID,S.SERIAL#
FROM V$LOCK L/*,SYS.DBA_OBJECTS O*/,V$SESSION S
WHERE L.SID = S.SID
AND L.ID1 =874582

然後執行如下的sql語句:

ALTER SYSTEM KILL SESSION 'SID,SERIAL#';

這樣就可以在pl/sql上殺掉oracle程式,如果不能成功釋放,可以用下面的殺手簡:

步驟二:找出spid,在linux上殺掉該作業系統程式號:

SELECT SPID
FROM V$PROCESS
WHERE ADDR = (SELECT PADDR FROM V$SESSION WHERE SID = &ORASID);

或者這個語句
Select a.Status, a.Sid, a.Serial#, a.Saddr, a.Paddr, b.Spid, b.Addr, a.Machine
From V$session a, V$process b
Where b.Addr = a.Paddr And a.Sid In (10,14,36);

步驟三:登陸ORALCE系統執行命令;

kill -9 SPID;

如此方法即可解除死鎖的程式;

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8109090/viewspace-879204/,如需轉載,請註明出處,否則將追究法律責任。

相關文章