當 DDL 操作執行或引用 Schema 物件時,資料字典層面的鎖,保護物件定義不被並發變更。**僅鎖定單一物件,不鎖整個字典**。由資料庫自動請求,使用者無法顯式控制。
CREATE TABLE、ALTER TABLE、DROP TABLE、TRUNCATE TABLE、CREATE INDEX 等。ALTER TABLE t ADD col 執行期間,另一 Session DROP TABLE t 將等待;反之亦然。CREATE PROCEDURE/FUNCTION/PACKAGE/VIEW、COMPILE 等引用現有表的 DDL。ALTER TABLE、DROP TABLE) 將等待。| 鎖類型 | 阻塞對象 | 並行同類 | 典型操作 | 持有期 |
|---|---|---|---|---|
| 排他 DDL | 所有 DDL/DML | 否 | ALTER/DROP/TRUNCATE/CREATE INDEX | DDL 完成提交 |
| 共享 DDL | 排他 DDL | 是 | CREATE PROCEDURE/VIEW/COMPILE | 編譯完成提交 |
| 解析鎖 | 無 (可被中斷) | 是 | SQL/PLSQL 解析 | 游標在 Shared Pool 存活期 |
ALTER TABLE (加欄位、修改類型) 會持有排他 DDL 鎖,導致所有 DML 阻塞 → **維護窗口操作或使用 DBMS_REDEFINITION 線上重定義**。CREATE OR REPLACE PROCEDURE 釋放共享 DDL 鎖,但若同時有 ALTER TABLE 等待,會造成編譯排隊。ORA-04061/ORA-04065 (狀態失效),應用層需捕獲重試邏輯。