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

Oracle 鎖機制分類詳解:自動/顯式、共享/排它、DML/DDL、內部閂鎖四維劃分

     編輯:Oracle 資料庫基礎

前言:四維視角重構鎖知識體系

Oracle 鎖種類繁多,單一分類易遺漏。本文從用戶/系統、鎖級別、操作類型、內部機制四個維度劃分,構建完整鎖知識圖譜,附死鎖成因、檢測、處理實戰指南。

一、 按用戶/系統劃分:自動鎖 vs 顯式鎖

二、 按鎖級別劃分:共享鎖 vs 排它鎖

類型觸發方式特點典型場景
自動鎖DML/DDL 執行時隱式獲取無需用戶干預、粒度由優化器決定、死鎖自動檢測所有常規業務 SQL
顯式鎖用戶主動發出 LOCK TABLE / SELECT FOR UPDATE粒度/模式可控、應用層協調並發、需自行避免死鎖批量處理前預鎖、跨表一致性掃描、應用級樂觀鎖輔助

三、 按操作類型劃分:DML 鎖 vs DDL 鎖

1. DML 鎖 (數據操縱鎖)

  • 行鎖 (TX Lock):
    • INSERT/UPDATE/DELETE 自動獲取行級排它鎖 (Mode 3)
    • 無鎖升級機制 (Oracle 不會將行鎖升級為表鎖)
    • 行鎖信息存儲在數據塊頭 (ITL 槽),無中央鎖表,極高並發
  • 表鎖 (TM Lock):
    • 行鎖同時自動獲取表級共享鎖 (Mode 2/3),防止 DDL 衝突
    • 顯式 LOCK TABLE 可獲取 Mode 2/3/4/5/6
    • DDL 需 Mode 6 (X),被任何 DML 表鎖阻塞
  • 死鎖:
    • 成因:T1 鎖 A 等 B,T2 鎖 B 等 A (典型:不同順序更新多表)
    • 檢測:Oracle 定期掃描等待圖,自動選擇 Undo 少者犧牲,報 ORA-00060
    • 解決:統一多表操作順序、縮短事務、避免長事務中用戶交互

2. DDL 鎖 (數據字典鎖)

維度共享鎖 (Share Lock)排它鎖 (Exclusive Lock)
並發性高 (多會話可同時持有同一資源共享鎖)低 (獨佔,阻塞其他共享/排它鎖)
數據一致性防止讀到髒數據,但易發生更新丟失 (需應用層處理)強一致性,序列化訪問
死鎖風險較高 (拙劣設計 + 共享鎖升級)較低 (但持有時間長易阻塞)
典型模式Mode 2 (RS), Mode 4 (S)Mode 3 (RX), Mode 6 (X)

四、 內部閂鎖 — 保護內存結構的輕量級同步原語

  • 本質:保護 SGA 共享數據結構 (緩存鏈、共享池堆、Redo 分配鎖等) 的短期排他訪問
  • 特點:無等待隊列、自旋 -> 睡眠 -> 重試、無死鎖檢測、極短持有時間 (微秒級)
  • 常見閂鎖:
    • Cache Buffers Chains (CBC) — 保護緩存鏈掃描/修改,熱塊爭用熱點
    • Library Cache / Library Cache Pin — 共享池對象加載/釘住/解析
    • Redo Allocation / Redo Copy — Redo Log Buffer 空間分配
    • Shared Pool / Row Cache — 數據字典緩存
  • 監控:V$LATCH, V$LATCHHOLDER, V$LATCH_MISSES、AWR "Latch Sleep" 區段
  • 優化:減少熱塊訪問 (反向索引、分區)、增加共享池、使用綁定變量降低解析

五、 死鎖實戰處理流程

  1. 告警日志 / Trace 文件確認 ORA-00060
  2. Trace 文件分析:死鎖鏈路、涉及 SQL、鎖模式、犧牲者 SID
  3. 應用層修復:**統一表訪問順序** (如永遠先鎖 Parent 再鎖 Child)
  4. 必要時添加 SELECT ... FOR UPDATE NOWAIT 失敗快速退出重試

六、 總結

Oracle 鎖體系 = **自動行鎖 (TX) 為核心 + 表鎖 (TM) 輔助 DDL 隔離 + DDL 字典鎖保護元數據 + 閂鎖保護內存結構**。理解四維分類,掌握「行鎖不升級、死鎖自動檢測、閂鎖自旋睡眠」三大特性,即可從容應對並發故障與性能調優。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類型觸發操作模式作用
排它 DDL 鎖CREATE/ALTER/DROP 對象Exclusive (X)防止並發修改同一對象結構,維護字典一致性
共享 DDL 鎖創建依賴對象 (View/Package/Trigger 引用表)Share (S)防止被引用對象結構變更導致依賴失效
解析鎖 (Parse Lock)SQL 解析/優化時Share (S)追蹤共享池游標依賴的對象,對象變更導致游標失效重解析