鎖基礎架構
- 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/持有共享資源即為作用)。
鎖競爭常見成因
- 不必要的高層次鎖 (如鎖整表)。
- 長時間運行事務。
- 未提交的修改 (使用者離開未提交)。
- 第三方工具/觸發器施加高層次鎖。
解決路徑
- 鎖持有者 COMMIT / ROLLBACK。
- DBA 強制殺死 Session:
ALTER SYSTEM KILL SESSION 'sid,serial#'; (PMON 回滾並釋放鎖)。
死鎖自動處理
- Oracle 背景進程 (LCK0/LCKn) 定期偵測循環等待。
- 發現死鎖 → 回滾 **引發死鎖的那條陳述式** (非整個事務)。
- 收到
ORA-00060 的 Session 應主動 ROLLBACK 剩餘事務,避免邏輯不一致。