略,參考上篇。
-- 1. 以 SYSDBA 登入
SQLPLUS "/ AS SYSDBA"
-- 2. 一條 SQL 取得完整鎖鏈
SELECT S.USERNAME,
L.OBJECT_ID,
L.SESSION_ID,
S.SERIAL#,
L.ORACLE_USERNAME,
L.OS_USER_NAME,
L.PROCESS
FROM V$LOCKED_OBJECT L, V$SESSION S
WHERE L.SESSION_ID = S.SID;
-- 3. 直接殺 Oracle Session
ALTER SYSTEM KILL SESSION 'SID,SERIAL#'; -- SID = L.SESSION_ID
-- 4. 若仍未釋放,查 OS 進程號
SELECT P.SPID FROM V$SESSION S, V$PROCESS P
WHERE S.SID = '死鎖SID' AND S.PADDR = P.ADDR;
-- 5. OS 層殺進程
EXIT
PS -EF | GREP SPID
KILL -9 SPID
| 維度 | 四步法 | V$LOCKED_OBJECT 法 |
|---|---|---|
| 直觀度 | 分層清晰,適合教學 | 一條 SQL 直達核心,實戰更快 |
| 資訊豐富度 | 需多表關聯 | 直接輸出 OS_USER、PROCESS 等關鍵欄位 |
| 適用場景 | 需分析具體物件鎖類型時 | 緊急處理、批量清理 |
DDL_LOCK_TIMEOUT 避免 DDL 永久等待