四步定位法:從被鎖物件 → OS 進程
1. 找被鎖物件
SELECT * FROM V$DB_OBJECT_CACHE
WHERE OWNER = '目標用戶' AND LOCKS != '0';
2. 找持有鎖的 SID
SELECT * FROM V$ACCESS
WHERE OWNER = '目標用戶' AND NAME = '上一步查到的物件名';
3. 取得 SID、SERIAL#、PADDR、SPID
SELECT SID, SERIAL#, PADDR FROM V$SESSION WHERE SID = '上一步SID';
SELECT SPID FROM V$PROCESS WHERE ADDR = '上一步PADDR';
4. 雙層殺進程
-- 第 1 層:Oracle 邏輯層(標記 Session 為 KILLED)
ALTER SYSTEM KILL SESSION 'SID,SERIAL#';
-- 第 2 層:OS 物理層(徹底釋放資源)
-- Linux/Unix
KILL -9 SPID
-- Windows
ORAKILL SID SPID
-- 例:ORAKILL ORCL 12345
關鍵提醒
ALTER SYSTEM KILL SESSION 只是打標記,Session 可能因長時間回滾而長時間處於 KILLED 狀態,必須配合 OS 層 KILL -9 或 ORAKILL 徹底終結。
- 生產環境殺進程前**務必確認業務影響**,必要時協調應用端重連。
- 頻發死鎖應從應用邏輯(鎖表順序、提交頻率、索引缺失)根治,而非依賴事後殺進程。