一位 DBA 朋友遇到詭異現象:資料庫明明開啟了歸檔模式,卻無法自動歸檔,只能手動執行 ALTER SYSTEM ARCHIVE LOG CURRENT。經排查發現,資料庫實際處於手動歸檔模式,而 ARCHIVE LOG LIST 命令卻顯示 "Automatic archival Enabled",極具迷惑性。
ARCHIVE LOG LIST 不反映手動/自動歸檔狀態,僅顯示是否為歸檔模式。V$DATABASE.LOG_MODE:ARCHIVELOG(自動)vs MANUAL(手動)。-- 1. 開啟自動歸檔模式
SQL> ALTER DATABASE ARCHIVELOG;
Database altered.
SQL> ARCHIVE LOG LIST;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u03/archive/dev01
Oldest online log sequence 48
Next log sequence to archive 50
Current log sequence 50
SQL> SELECT log_mode FROM v$database;
LOG_MODE
------------
ARCHIVELOG
-- 2. 切換為手動歸檔模式(關鍵步驟)
SQL> ALTER DATABASE ARCHIVELOG MANUAL;
Database altered.
SQL> ARCHIVE LOG LIST; -- 顯示未變,極具欺騙性!
Database log mode Archive Mode
Automatic archival Enabled -- 此處仍顯示 Enabled!
...
SQL> SELECT log_mode FROM v$database; -- 唯一真實來源
LOG_MODE
------------
MANUAL
-- 3. 關閉歸檔模式
SQL> ALTER DATABASE NOARCHIVELOG;
Database altered.
SQL> ARCHIVE LOG LIST;
Database log mode No Archive Mode
Automatic archival Disabled
...
SQL> SELECT log_mode FROM v$database;
LOG_MODE
------------
NOARCHIVELOG
V$DATABASE.LOG_MODE,不可信賴 ARCHIVE LOG LIST 或 V$INSTANCE.LOG_MODE。LOG_MODE = 'MANUAL'。