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

Oracle 死鎖進程處理兩大法:標準四步法與 V$LOCKED_OBJECT 速查法

     編輯:Oracle 資料庫相關知識

方法一:標準四步定位法(同 49490)

略,參考上篇。

方法二:V$LOCKED_OBJECT 一鍵定位法(更直觀)

-- 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 等關鍵欄位
適用場景需分析具體物件鎖類型時緊急處理、批量清理

防患於未然

  1. 應用端統一鎖表順序(如永遠先鎖父表再鎖子表)
  2. 縮短事務長度,盡早 COMMIT
  3. 針對高頻衝突表建立合適索引,減少全表掃描鎖升級
  4. 啟用 DDL_LOCK_TIMEOUT 避免 DDL 永久等待
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved