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

Oracle 資料庫鎖機制深度解析:類型、監控與死鎖處理

     編輯:Oracle 資料庫基礎

鎖的基本類型

  • 排他鎖 (X Lock): 阻塞其他交易讀取與修改。
  • 共享鎖 (S Lock): 允許其他交易讀取,阻塞修改。

Oracle 以此兩類基礎鎖實作並發控制。

依保護對象分類

  1. DML 鎖:保護資料完整性(TM 表級鎖、TX 列級/交易鎖)
  2. DDL 鎖:保護物件結構定義
  3. 內部鎖與閂:保護資料庫內部結構

本文聚焦 DML 鎖。

TM 鎖模式對照表

模式代碼描述觸發 SQL
NULL1空SELECT
SS (Row-S)2列級共享SELECT FOR UPDATE, LOCK TABLE ... ROW SHARE
SX (Row-X)3列級排他INSERT/UPDATE/DELETE, LOCK TABLE ... ROW EXCLUSIVE
S (Share)4共享CREATE INDEX, LOCK TABLE ... SHARE
SSX (S/Row-X)5共享列級排他LOCK TABLE ... SHARE ROW EXCLUSIVE
X (Exclusive)6排他ALTER/DROP/TRUNCATE TABLE, LOCK TABLE ... EXCLUSIVE

TX 鎖機制

執行 DML 時自動取得 TX 鎖,持有至 COMMIT/ROLLBACK。同一列並發 DML 時,首個會話加鎖,其餘等待。首個提交釋放 TX 鎖,其他才能繼續。

監控相關視圖

視圖用途關鍵欄位
V$SESSION會話與鎖資訊SID, SERIAL#, PROGRAM, ROW_WAIT_OBJ#
V$SESSION_WAIT等待事件詳情SID, SECONDS_IN_WAIT, EVENT
V$LOCK系統所有鎖SID, TYPE(TM/TX), ID1, LMODE, REQUEST
DBA_LOCKSV$LOCK 格式化SESSION_ID, LOCK_TYPE, MODE_HELD, MODE_REQUESTED
V$LOCKED_OBJECT僅 DML 鎖,含回滾段XIDUSN, XIDSLOT, XIDSQN, OBJECT_ID, LOCKED_MODE

TX 鎖等待處理流程

  1. 發現 SQL 長時間無回應 → 懷疑鎖等待
  2. 查詢 V$LOCK 找出 TYPE='TX' 且 REQUEST>0 的會話(等待者)
  3. 找出對應 LMODE>0 的會話(持有者)
  4. 決定:通知持有者 COMMIT/ROLLBACK,或 DBA 強制 KILL SESSION

死鎖偵測與解決

Oracle 自動偵測死鎖,犧牲一交易回滾並回報 ORA-00060,記錄於 alert_SID.log 與 USER_DUMP_DEST 追蹤檔。追蹤檔含詳細死鎖圖(等待鏈、SQL、物件)。

常見死鎖類型:列級鎖、位圖索引死鎖。若追蹤檔指向位圖索引,改為 B-tree 索引通常可解決。

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