首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 鎖競爭與死鎖處理:原理、診斷與解決策略

     編輯:Oracle 資料庫基礎

鎖基礎架構

  • DML 自動加行級鎖 (TX),查詢不加鎖 (一致性讀)。
  • 兩種模式:Exclusive (X) / Share (S)。
  • 鎖類型:
    • DML 鎖:表級 (TM) + 行級 (TX) —— 事務至少持有 1 個 TM (S/SS/SX) + 1 個 TX (X)。
    • DDL 鎖:字典鎖。
  • 鎖隊列記錄:等待者、請求模式、先後順序。
  • 釋放時機:COMMIT / ROLLBACK / 進程異常終止 (PMON 清理)。

Quiesced Database 靜默狀態

除 SYS/SYSTEM 外無作用 Session (Session 正在事務/查詢/Fetch/持有共享資源即為作用)。

鎖競爭常見成因

  1. 不必要的高層次鎖 (如鎖整表)。
  2. 長時間運行事務。
  3. 未提交的修改 (使用者離開未提交)。
  4. 第三方工具/觸發器施加高層次鎖。

解決路徑

  • 鎖持有者 COMMIT / ROLLBACK。
  • DBA 強制殺死 Session:ALTER SYSTEM KILL SESSION 'sid,serial#'; (PMON 回滾並釋放鎖)。

死鎖自動處理

  • Oracle 背景進程 (LCK0/LCKn) 定期偵測循環等待。
  • 發現死鎖 → 回滾 **引發死鎖的那條陳述式** (非整個事務)。
  • 收到 ORA-00060 的 Session 應主動 ROLLBACK 剩餘事務,避免邏輯不一致。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved