Oracle 透過多層次鎖機制實現並發控制。本文系統整理 7 種鎖模式、DML 操作對應鎖類型、以及完整相容性矩陣,協助 DBA 診斷阻塞與死鎖問題。
| 代碼 | 英文縮寫 | 中文名稱 | 說明 |
|---|---|---|---|
| 0 | NONE | 無鎖 | 無任何鎖定 |
| 1 | NULL | 空鎖 | 僅表示關聯,不限制操作 |
| 2 | SS (Row-S) | 子共享鎖 | 允許並發查詢,禁止 DDL |
| 3 | SX (Row-X) | 子互斥鎖 | 允許查詢與子共享,禁止共享鎖 |
| 4 | S (Share) | 共享鎖 | 允許查詢與子共享,禁止修改 |
| 5 | SSX (S/Row-X) | 共享子互斥鎖 | 共享鎖+子互斥,禁止其他修改 |
| 6 | X (Exclusive) | 互斥鎖 | 完全獨佔,禁止所有其他鎖 |
| 操作 | 鎖模式 | LMODE | 描述 |
|---|---|---|---|
| SELECT | NULL | 1 | 不加鎖 |
| SELECT FOR UPDATE | SS | 2 | 子共享 |
| INSERT / UPDATE / DELETE | SX | 3 | 子互斥 |
| LOCK TABLE ... IN ROW SHARE MODE | SS | 2 | 子共享 |
| LOCK TABLE ... IN SHARE MODE | S | 4 | 共享 |
| LOCK TABLE ... IN EXCLUSIVE MODE | X | 6 | 互斥 |
| ALTER TABLE / DROP TABLE / TRUNCATE | X | 6 | 互斥 |
| CREATE INDEX | S | 4 | 共享 |
NULL SS SX S SSX X
NULL YES YES YES YES YES YES
SS YES YES YES YES YES NO
SX YES YES YES NO NO NO
S YES YES NO YES NO NO
SSX YES YES NO NO NO NO
X YES NO NO NO NO NO
V$LOCK 配合 V$SESSION 可即時掌握阻塞鏈。NOWAIT 或 WAIT n 避免無限期等待。熟悉鎖相容性是解決並發效能問題的關鍵基礎。