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

Oracle 鎖機制全景圖:自動/顯式、共享/排他、DML/DDL、內部闩鎖

     編輯:Oracle 資料庫基礎

按來源分類

  • 自動鎖:DML/DDL 觸發,Oracle 隱式獲取,無需用戶干預。
  • 顯式鎖:用戶通過 LOCK TABLE、SELECT ... FOR UPDATE 主動請求,用於特定業務協調。

按級別分類

  • 共享鎖 (S):多事務可同時持有,高併發,但易導致死鎖或更新丟失。
  • 排他鎖 (X):獨佔資源,阻塞其他共享/排他請求,保證數據一致性。

按操作類型分類

DML 鎖

  • 行鎖 (TX):INSERT/UPDATE/DELETE 自動獲取該行排他鎖,同時隱式獲取表級共享鎖防 DDL 干擾。
  • 表鎖 (TM):
    • Row-S (SS):SELECT ... FOR UPDATE
    • Row-X (SX):DML 修改
    • Share (S):CREATE INDEX
    • Exclusive (X):DROP TABLE、ALTER TABLE(需顯式 LOCK TABLE ... IN EXCLUSIVE MODE)
  • 死鎖:雙向等待衝突鎖。Oracle 自動檢測並回滾一方(ORA-00060),無需人工干預,但需應用層捕獲異常重試。

DDL 鎖

  • 排他 DDL 鎖:CREATE/ALTER/DROP 對象,防止結構變更衝突。
  • 共享 DDL 鎖:編譯包/視圖/觸發器時,持有依賴對象的共享 DDL 鎖。
  • 解析鎖 (Parse Lock):共享池中緩存的 SQL/PLSQL 持有依賴對象的解析鎖,對象變更時使緩存失效,下次硬解析。

內部闩鎖

保護 SGA 內部數據結構(如緩存鏈表、共享池桶)的輕量級同步原語,持有時間極短(微秒級),用戶不可見、不可控。典型等待事件:latch: cache buffers chains、latch: library cache。

死鎖處理

-- SQL 級
ALTER SYSTEM KILL SESSION 'sid,serial#';
-- OS 級
kill -9 spid  (Linux)
orakill sid spid  (Windows)

總結

理解鎖的層級(行→表→對象→內部結構)、模式(S/X)、獲取方式(自動/顯式)、生命周期,是排查併發問題、設計高併發應用的基石。

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