Oracle 10g 預設啟用快速恢復區(Flash Recovery Area,FRA),大小預設 2GB。當匯入大量資料產生大量歸檔日誌,FRA 空間耗盡,導致:
ORA-16038: log ... cannot be archived、ORA-19809: limit exceeded for recovery files。ORA-16014: log ... not archived, no available destinations。| 方案 | 操作 | 優點 | 缺點 |
|---|---|---|---|
| 1. 變更歸檔目的地 | ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/new/path' SCOPE=BOTH; | 立即生效,不佔用 FRA | 需額外儲存規劃,失去 FRA 統一管理優勢 |
| 2. 手動移動/刪除舊歸檔 | OS 層級 `mv` 或 `rm`,再 `RMAN CROSSCHECK` + `DELETE EXPIRED` | 快速釋放空間 | 需同步 RMAN 儲存庫,易遺漏導致誤判 |
| 3. 擴大 FRA 大小(推薦) | ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=4G SCOPE=BOTH; | 保持 FRA 架構,零停機,線上擴容 | 需檔案系統有足夠剩餘空間 |
SQL> SHOW PARAMETER db_recovery_file_dest_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 2G
SQL> ALTER SYSTEM SET db_recovery_file_dest_size=3G SCOPE=BOTH;
System altered.
SQL> ALTER DATABASE OPEN;
Database altered.
SQL> SHOW PARAMETER db_recovery_file_dest_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 3G
參數即時生效,SPFILE 同步更新,資料庫順利開啟。
若在 OS 層級直接 `rm` 歸檔檔案,V$RECOVERY_FILE_DEST 仍顯示舊空間佔用,因為 RMAN 儲存庫未同步。後續大量交易仍會觸發 ORA-19815 警告並再次卡住。
RMAN> CROSSCHECK ARCHIVELOG ALL; -- 標記遺失檔案為 EXPIRED
RMAN> DELETE EXPIRED ARCHIVELOG ALL; -- 從儲存庫移除 EXPIRED 記錄,釋放 FRA 空間統計
或使用 `DELETE ARCHIVELOG UNTIL TIME ...` 直接由 RMAN 管理刪除。
FRA 2GB 預設值對現代業務量嚴重偏小。採用「線上擴容 FRA + RMAN 正規化清理」組合拳,可永久杜絕歸檔空間不足導致的資料庫掛起風險。