首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

徹底清除被標記 Killed 卻不釋放鎖的 Oracle 進程:OS 層級強制終結法

     編輯:Oracle 資料庫相關知識

遇到 ALTER SYSTEM KILL SESSION 後狀態顯示 KILLED 但鎖長時間不釋放,比重啟資料庫更優雅的做法是在作業系統層級強制終結對應的 Server Process (Linux) 或 Thread (Windows)。

四步驟標準流程

1. 查詢被鎖物件與 Session

COL object_name FOR A30
COL machine FOR A20
SELECT object_name, machine, s.sid, s.serial#
FROM v$locked_object l, dba_objects o, v$session s
WHERE l.object_id = o.object_id AND l.session_id = s.sid;

2. 發出 Kill Session 指令

ALTER SYSTEM KILL SESSION 'sid,serial#';
-- 批量產生指令:
SELECT 'ALTER SYSTEM KILL SESSION ''' || s.sid || ',' || s.serial# || ''';'
FROM v$locked_object l, dba_objects o, v$session s
WHERE l.object_id = o.object_id AND l.session_id = s.sid;

3. 若仍殘留,查詢 OS Process/Thread ID

SELECT spid, osuser, s.program
FROM v$session s, v$process p
WHERE s.paddr = p.addr AND s.sid = :target_sid;

4. OS 層級強制終結

  • Linux (root):kill -9
  • Windows:使用 Oracle 提供的 orakill:
    orakill (thread_id 即 spid)
    例:c:\> orakill orcl 12345

風險提示

可寫存儲過程自動化上述四步,但不建議常態化使用。Root 強殺進程本身帶風險,可能導致共享記憶體殘留、資料檔不一致。僅作為緊急手段,事後建議檢查 Alert Log 並考慮重啟實例以確保一致性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved