摘錄地址: http://blog.csdn.net/hooyang/archive/2005/04/27/365746.aspx
開發環境:win2000server+oracle9i+delphi
開發人員報告:在程序中殺了JOB,但是被操作的表還是鎖表狀態,
其中有一張日志表還在不斷插入記錄,直到執行完所有插入操作(一個漫長的等待過程)才能解鎖
現場描述:oem中被殺job起的SESSION狀態為killed,其中有3張表被鎖點擊右鍵--》中斷會話
提示: 標記要刪去的會話
===================================================================================================
處理方法一 :
1.SELECT saddr,sid,serial#,paddr,username,status FROM v$session WHERE username IS NOT NULL
example:saddr,sid,serial#,paddr,username,status FROM v$session WHERE username = 'XNJW0419' ;
SADDR SID SERIAL# PADDR USERNAME STATUS
-------- ---------- ---------- -------- ------------------------------ --------
542E0E6C 11 314 542B70E8 EYGLE INACTIVE 542E5044 18 662 542B6D38 SYS ACTIVE
2.ALTER SYSTEM KILL SESSION 'sid, serial#';
example:ALTER SYSTEM KILL SESSION '11,314';(注:在sqlplus中執行 )
結果: 提示標記要刪去的會話 無法釋放會話,未成功解鎖
====================================================================================================
處理方法二 :
a、 找到你要殺掉的那個SESSION, 并記下paddr
SELECT sid, username, paddr, status FROM v$session WHERE username = '用戶名' ;
example:SELECT sid, username, paddr, status FROM v$session WHERE username = 'XNJW0419' ;
SID USERNAME PADDR STATUS
---------- ------------------------------ -------- --------
10 XNJW0419 2B5E2E2C KILLED
b、 找到這個SESSION所對應的spid
SELECT * FROM v$process WHERE addr = '上面查尋的paddr';
example:SELECT ADDR,PID,SPID,USERNAME,SERIAL#,TERMINAL FROM v$process WHERE addr = '2B5E2E2C';
ADDR PID SPID USERNAME SERIAL# TERMINAL
-------- ---------- ------------ --------------- ---------- ----------------
2B5E2E2C 44 1204 SYSTEM -99 JWC
c、 殺掉spid所標識的那個進程
D:\>orakill sid spid (注:cmd命令窗口中執行 只有oracle服務器端才有orakill命令)
example: D:\>orakill oemrep 1204
提示:KILL OF THREAD id 1204 IN INSTANCE oemrep successfully signalled.
結果:成功刪除該SESSION,表也解鎖