一、 三種歸檔模式對比
| 模式 | 適用場景 | 管理複雜度 | 恢復能力 | 關鍵特性 |
| NOARCHIVELOG |
測試/開發/可重載數據倉庫 |
極低 |
僅支援實例恢復 (Crash Recovery),**無介質恢復** |
無歸檔進程 (ARCn),Redo 循環覆蓋 |
| ARCHIVELOG (傳統手動路徑) |
生產環境、需時間點恢復 (PITR)、Data Guard 物理備庫 |
中 (需手動管理路徑、空間、刪除策略) |
完整介質恢復、PITR、Data Guard |
`LOG_ARCHIVE_DEST_n`、`LOG_ARCHIVE_FORMAT` 手動配置 |
| ARCHIVELOG + Flash Recovery Area (FRA) |
**10g+ 生產首選**、簡化管理、自動空間回收 |
低 (統一參數 `DB_RECOVERY_FILE_DEST`) |
同傳統 + 自動過期清理、RMAN 深度整合 |
閃回日志、歸檔日志、控制文件備份、RMAN 備份集共享 FRA 空間 |
二、 關鍵視圖:監控歸檔狀態與性能
-- 歸檔模式狀態
SELECT log_mode FROM v$database; -- ARCHIVELOG / NOARCHIVELOG
-- 歸檔目標狀態
SELECT dest_id, status, target, destination, schedule, mountid
FROM v$archive_dest WHERE status='VALID';
-- 歸檔進程
SELECT process, status, thread#, sequence# FROM v$managed_standby WHERE process LIKE 'ARC%';
-- 歸檔日志歷史
SELECT thread#, sequence#, first_time, next_time, blocks, block_size
FROM v$archived_log WHERE dest_id=1 ORDER BY sequence# DESC;
-- FRA 空間使用
SELECT * FROM v$recovery_file_dest;
-- SPACE_LIMIT, SPACE_USED, SPACE_RECLAIMABLE, NUMBER_OF_FILES
三、 模式切換標準作業程序 (SOP) — 需停機維護窗口
1. 啟用 FRA 歸檔 (推薦生產首選)
-- 1. 設置 FRA 位置與大小 (動態生效,無需重啟)
ALTER SYSTEM SET db_recovery_file_dest_size = 20G SCOPE=BOTH;
ALTER SYSTEM SET db_recovery_file_dest = '+FRA_DG' SCOPE=BOTH; -- ASM 磁盤組或文件系統路徑
-- 2. 關閉數據庫
SHUTDOWN IMMEDIATE;
-- 3. 掛載並啟用歸檔
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
-- 4. 啟用自動歸檔 (10g FRA 模式下通常隱式啟用,顯式確認)
ALTER SYSTEM SET log_archive_start = TRUE SCOPE=SPFILE; -- 10g 參數,11g+ 忽略
-- 5. 打開數據庫
ALTER DATABASE OPEN;
-- 6. 驗證
ARCHIVE LOG LIST;
-- Database log mode: Archive Mode
-- Automatic archival: Enabled
-- Archive destination: USE_DB_RECOVERY_FILE_DEST
-- Oldest online log sequence: 50
-- Next log sequence to archive: 52
-- Current log sequence: 52
2. 啟用傳統手動路徑歸檔
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
-- 配置歸檔目標 (SCOPE=SPFILE 需重啟生效,或 SCOPE=MEMORY 即時生效但重啟失效)
ALTER SYSTEM SET log_archive_dest_1 = 'LOCATION=/u01/app/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PROD' SCOPE=SPFILE;
ALTER SYSTEM SET log_archive_dest_2 = 'LOCATION=/u02/app/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PROD' SCOPE=SPFILE; -- 雙路徑冗余
-- 歸檔文件名格式 (%S=序列號零填充, %T=線程號零填充, %R=RESETLOGS ID)
ALTER SYSTEM SET log_archive_format = 'arch_%t_%s_%r.arc' SCOPE=SPFILE;
-- 啟用自動歸檔
ALTER SYSTEM SET log_archive_start = TRUE SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;
-- 驗證
ARCHIVE LOG LIST;
3. 關閉歸檔 (僅限測試/可重載環境)
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER SYSTEM ARCHIVE LOG STOP; -- 停止自動歸檔
ALTER DATABASE NOARCHIVELOG;
ALTER DATABASE OPEN;
ARCHIVE LOG LIST; -- 確認 NOARCHIVELOG
四、 FRA 與傳統路徑雙向切換實戰
FRA → 傳統路徑
- OEM / SQL*Plus 修改初始化參數:清空 `LOG_ARCHIVE_DEST_1`...`_10` 所有值 (設為 `''`),`SCOPE=BOTH`。
- 設置傳統參數:`LOG_ARCHIVE_DEST_1`, `LOG_ARCHIVE_FORMAT`, `LOG_ARCHIVE_START` (10g)。
- 重啟實例生效 (靜態參數)。
- 清理舊 FRA 歸檔: 若手動刪除 FRA 內舊歸檔,**必須**用 RMAN 同步控制文件:
RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> DELETE EXPIRED ARCHIVELOG ALL;
傳統路徑 → FRA
- 按「啟用 FRA 歸檔」步驟配置 `DB_RECOVERY_FILE_DEST` / `SIZE`。
- 清空 `LOG_ARCHIVE_DEST_n` 參數。
- 重啟實例。
- 同樣需 RMAN `CROSSCHECK`/`DELETE EXPIRED` 清理舊路徑殘留記錄。
五、 關鍵參數對照表 (10g vs 11g+ 變化)
| 參數 | 10g | 11g+ | 說明 |
| LOG_ARCHIVE_START | TRUE/FALSE | 廢棄 (隱式啟用) | 10g 控制自動歸檔啟停 |
| LOG_ARCHIVE_DEST_n | 字符串路徑 | 支援 SERVICE=... (Data Guard)、ALTERNATE、COMPRESSION | 傳統路徑配置核心 |
| LOG_ARCHIVE_FORMAT | %S %T %R | 新增 %d (DB_NAME), %r (RESETLOGS_ID) | 文件名模板 |
| DB_RECOVERY_FILE_DEST | 引入 | 核心參數 | FRA 根目錄 |
| DB_RECOVERY_FILE_DEST_SIZE | 引入 | 核心參數 | FRA 空間硬限制 |
六、 運維避坑指南
- FRA 空間滿 (ORA-19809/ORA-19804): 設置 `DB_RECOVERY_FILE_DEST_SIZE` 留 15-20% 緩衝;配置 RMAN 定期備份歸檔至磁帶/異地並 `DELETE ARCHIVELOG BACKED UP 2 TIMES TO DEVICE TYPE SBT`;監控 `V$RECOVERY_FILE_DEST.SPACE_USED / SPACE_LIMIT`。
- 歸檔卡住 (ARCH PROCESS STUCK):** 檢查磁盤 I/O、FRA 空間、網絡 (Data Guard 遠程歸檔);`ALTER SYSTEM ARCHIVE LOG CURRENT` 強制切日志觸發歸檔。
- 手動刪除歸檔文件 (OS 級 rm): **嚴禁**!會導致控制文件/RMAN Repository 不一致,必須用 RMAN `DELETE ARCHIVELOG` 或 `CROSSCHECK`+`DELETE EXPIRED`。
- RESETLOGS 後歸檔衝突: 打開數據庫 `RESETLOGS` 會生成新 Incarnation,舊歸檔不適用。RMAN `LIST INCARNATION` 確認當前化身,備份策略需覆蓋新化身。`LOG_ARCHIVE_FORMAT` 含 `%R` 可區分。