兩種運行模式的本質差異
| 特性 | 歸檔模式 (ARCHIVELOG) | 非歸檔模式 (NOARCHIVELOG) |
| 線上重做日誌 | 填滿前必須歸檔,不可覆寫 | 循環覆寫,無歸檔程序 |
| 時間點恢復 (PITR) | ✅ 支援任意時間點恢復 | ❌ 僅能恢復至最近備份點 |
| 熱備份能力 | ✅ 支援線上備份 | ❌ 僅支援冷備份 |
| Data Guard 待機庫 | ✅ 支援 | ❌ 不支援 |
| 閃回技術 | ✅ 完整支援 | ❌ 僅限閃回表 (需啟用) |
| 儲存空間壓力 | 高 (需管理歸檔日誌) | 低 |
| 管理複雜度 | 高 | 低 |
| 適用場景 | 生產環境、7×24 業務 | 開發/測試、唯讀數據倉庫 |
模式切換完整操作流程
非歸檔 → 歸檔 (生產環境標準化流程)
-- 1. 關閉資料庫並完整冷備份 (關鍵保護步驟)
SHUTDOWN IMMEDIATE;
-- OS 層面複製所有資料檔、控制檔、重做日誌、參數檔
-- 2. 修改初始化參數 (init.ora / spfile)
*.log_archive_start = TRUE # 10g+ 已廢棄,改用 LOG_ARCHIVE_DEST_n
*.log_archive_dest_1 = 'LOCATION=/u01/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PROD'
*.log_archive_format = 'arch_%t_%s_%r.arc'
*.log_archive_max_processes = 4 # 並行歸檔進程數
*.remote_archive_enable = TRUE # Data Guard 需求
-- 3. 啟動至 MOUNT 狀態
STARTUP MOUNT;
-- 4. 切換模式
ALTER DATABASE ARCHIVELOG;
-- 5. 開啟資料庫
ALTER DATABASE OPEN;
-- 6. 驗證
ARCHIVE LOG LIST;
-- 應顯示: Database log mode: Archive Mode
歸檔 → 非歸檔 (降級操作,極度謹慎)
-- 1. 關閉資料庫並完整冷備份 (絕對必要)
SHUTDOWN IMMEDIATE;
-- 完整 OS 備份
-- 2. 修改參數:註釋或移除歸檔相關參數
# *.log_archive_dest_1 = ...
# *.log_archive_format = ...
-- 3. 啟動至 MOUNT
STARTUP MOUNT;
-- 4. 切換模式
ALTER DATABASE NOARCHIVELOG;
-- 5. 開啟資料庫
ALTER DATABASE OPEN;
-- 6. 強制執行一次完整冷備份 (模式切換後首要任務)
SHUTDOWN IMMEDIATE;
-- OS 完整備份
STARTUP;
關鍵參數深度解析 (11g/12c/19c)
| 參數 | 說明 | 建議設定 |
| LOG_ARCHIVE_DEST_n | 歸檔目的地 (n=1..31),支援本地/遠端/ASM | 至少 2 個本地路徑 + 1 個遠端 (Data Guard) |
| LOG_ARCHIVE_DEST_STATE_n | 啟用/延遲/替代狀態 | ENABLE / DEFER / ALTERNATE |
| LOG_ARCHIVE_FORMAT | 檔名格式:%t=線程 %s=序列 %r=重置日誌 ID | arch_%t_%s_%r.arc |
| LOG_ARCHIVE_MAX_PROCESSES | ARCn 進程數 (1-30) | CPU 核心數 / 2,預設 4 |
| LOG_ARCHIVE_MIN_SUCCEED_DEST | 至少成功寫入的目的地數 | 1 (單機) / 2 (Data Guard) |
| ARCHIVE_LAG_TARGET | 強制切換日誌間隔 (秒),限制資料遺失窗口 | 1800 (30 分) / 3600 (1 小時) |
| DB_RECOVERY_FILE_DEST | 快速恢復區 (FRA) 路徑 | 獨立磁碟,大小 = DB × 1.5~2 |
| DB_RECOVERY_FILE_DEST_SIZE | FRA 空間上限 | 同上 |
歸檔日誌管理最佳實踐
1. 多路徑歸檔防單點故障
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=/u01/arch1' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2 = 'LOCATION=/u02/arch2' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_3 = 'LOCATION=/u03/arch3' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_MIN_SUCCEED_DEST = 2 SCOPE=BOTH;
2. FRA 自動管理 (推薦)
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '/u01/fra' SCOPE=BOTH;
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 500G SCOPE=BOTH;
-- 歸檔自動寫入 FRA,空間壓力時自動刪除已備份歸檔
3. RMAN 歸檔備份與刪除策略
# 每日備份腳本包含
BACKUP ARCHIVELOG ALL DELETE INPUT TAG 'DAILY_ARCH';
# 或保留策略自動管理
CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 2 TIMES TO DEVICE TYPE DISK;
4. 監控關鍵指標
-- 歸檔產生速率 (每小時 GB)
SELECT TRUNC(FIRST_TIME,'HH') HOUR,
ROUND(SUM(BLOCKS*BLOCK_SIZE)/1024/1024/1024,2) GB_PER_HOUR
FROM V$ARCHIVED_LOG
WHERE FIRST_TIME > SYSDATE-1
GROUP BY TRUNC(FIRST_TIME,'HH')
ORDER BY 1;
-- 歸檔落後檢查 (Data Guard)
SELECT * FROM V$ARCHIVE_DEST_STATUS WHERE STATUS != 'VALID';
常見問題與排查
| 現象 | 原因 | 解決 |
| ORA-00257: archiver error | 歸檔目的地滿/權限/掛載點問題 | 清理空間、檢查權限、增大 FRA、增加目的地 |
| ORA-16038: log cannot be archived | 歸檔進程卡住/目的地無效 | 檢查 ARCn 進程、重啟歸檔、切換目的地 |
| 歸檔日誌產生暴增 | 大量 DML/批次作業/索引重建 | 調整批次提交頻率、使用 NOLOGGING 操作 (謹慎) |
| 切換模式後 OPEN 失敗 | 未完成完整冷備份就切換 | 從備份恢復、重新切換流程 |
版本演進注意事項
- 10g+:`LOG_ARCHIVE_START` 廢棄,歸檔進程自動管理
- 11g+:支援 `LOG_ARCHIVE_DEST_n` 至 31 個、FRA 完善
- 12c+:CDB/PDB 架構下歸檔在 CDB 層級管理、PDB 級閃回
- 19c+:自動索引、自動歸檔管理增強、支援雲端儲存目的地
決策檢查清單:生產環境必須歸檔模式的鐵律
- 業務是否 7×24 運行?
- 是否需要時間點恢復 (PITR)?
- 是否部署 Data Guard?
- 是否使用閃回資料庫/表/查詢?
- 是否有法律/合規要求零資料遺失?
- 是否有 RMAN 完整備份策略?
任一項為「是」→ 必須啟用 ARCHIVELOG 模式
總結
歸檔模式是 Oracle 生產環境的基礎設施標配。雖帶來歸檔空間管理與監控額外負擔,但換取的是完整恢復能力、零停機備份、災難恢復選項。切換流程雖簡單,但前後完整冷備份是不可妥協的安全紅線。善用 FRA、RMAN 保留策略、多路徑歸檔,將運維負擔降至可控範圍。