警示:Oracle 系統核心表 DUAL(單列單行虛表)雖可執行 DML/DDL 操作,但絕對禁止執行 DROP TABLE dual。刪除後資料庫啟動將報 ORA-1092: ORACLE instance terminated. Disconnection forced,導致實例無法掛載。
SQL> CREATE PFILE='d:\pfile.bak' FROM SPFILE;SQL> SHUTDOWN IMMEDIATE;d:\pfile.bak,在末尾新增:
replication_dependency_tracking = FALSE
此參數繞過複製相關依賴檢查,允許在缺少 DUAL 表的情況下啟動實例進行修復。SQL> STARTUP PFILE='d:\pfile.bak';SQL> CREATE TABLE "SYS"."DUAL" ("DUMMY" VARCHAR2(1));
SQL> INSERT INTO "SYS"."DUAL" VALUES ('X');
SQL> COMMIT;pfile.bak 移除新增參數,或重新生成 SPFILE:
SQL> CREATE SPFILE FROM PFILE='d:\pfile.bak';
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;DUAL 為 SYS Schema 核心物件,內部代碼大量硬編碼依賴(如 SELECT SYSDATE FROM DUAL)。replication_dependency_tracking 會檢查複製相關物件,觸發對 DUAL 的存取導致崩潰。FALSE 可跳過該檢查,賴以啟動實例完成 DDL 修復。SYS、SYSTEM 下物件禁止 DROP/ALTER。CREATE OR REPLACE TRIGGER prevent_core_ddl
BEFORE DROP ON DATABASE
WHEN (ORA_DICT_OBJ_OWNER IN ('SYS','SYSTEM'))
BEGIN
RAISE_APPLICATION_ERROR(-20001, '核心 Schema 禁止 DROP 操作');
END;若無備份且上述方法失效,僅能重建資料庫並從邏輯備份導入。切記:DUAL 表只能查詢,不可刪除。