生產環境 AIX 平台 Oracle 10gR2 因閃回區 (DB_RECOVERY_FILE_DEST) 寫滿,導致 ORA-16014: log not archived, no available destinations,資料庫無法 OPEN。本文記錄完整排查流程:緊急擴容、RMAN 清理過期備份/歸檔、強制刪除舊歸檔、轉移歸檔目的地至 NFS、權限修復驗證。
SQL> ALTER DATABASE OPEN;
ORA-16014: log 3 sequence# 157 not archived, no available destinations
ORA-00312: online log 3 thread 1: '/opt/oracle/software/oradata/orcl/redo03.log'
根因:閃回區空間耗盡,LGWR 無法切換日誌,歸檔進程 (ARCn) 無寫入空間,導致線上日誌無法歸檔,資料庫掛起。
SQL> ALTER SYSTEM SET db_recovery_file_dest_size=3G SCOPE=BOTH;
System altered.
SQL> ALTER DATABASE OPEN;
Database altered.
原理:動態調整參數,立即釋放寫入空間,讓歸檔進程恢復運作,資料庫順利 OPEN。
RMAN> CROSSCHECK BACKUPSET;
RMAN> DELETE NOPROMPT EXPIRED BACKUPSET;
RMAN> DELETE OBSOLETE;
RMAN> DELETE NOPROMPT EXPIRED BACKUP;
RMAN> DELETE NOPROMPT EXPIRED COPY;
-- 清理歸檔
RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
-- 若仍不足,強制刪除 7 天前歸檔 (謹慎!確認備份有效)
RMAN> DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
SQL> ALTER SYSTEM SET log_archive_dest_1='location=/nfsdisk/oraarc' SCOPE=BOTH;
System altered.
SQL> ARCHIVE LOG LIST;
Database log mode: Archive Mode
Archive destination: /nfsdisk/oraarc
Current log sequence: 163
-- 驗證切換
SQL> ALTER SYSTEM SWITCH LOGFILE;
設定 NFS 路徑後 SWITCH LOGFILE 卡住,查 V$ARCHIVE_DEST 發現 LOG_ARCHIVE_DEST_1 狀態為 ERROR。
SQL> COL DESTINATION FORMAT A20
SQL> SELECT DEST_ID, DEST_NAME, STATUS, DESTINATION FROM V$ARCHIVE_DEST;
-- DEST_1 顯示 ERROR /nfsdisk/oraarc
修復:OS 層授權 Oracle 用戶寫入權限
# chown oracle:oinstall /nfsdisk/oraarc
# chmod -R 777 /nfsdisk/oraarc
授權後歸檔恢復正常,STATUS 變為 VALID。
-- 查看歸檔模式
SQL> ARCHIVE LOG LIST;
-- 閃回區使用率
SQL> SELECT * FROM V$FLASH_RECOVERY_AREA_USAGE;
-- 總佔用空間 (GB)
SQL> SELECT SUM(PERCENT_SPACE_USED)*3/100 FROM V$FLASH_RECOVERY_AREA_USAGE;
LOG_ARCHIVE_DEST_1 指向本地快速儲存,LOG_ARCHIVE_DEST_2 指向 NFS/遠端,參數 LOG_ARCHIVE_MIN_SUCCEED_DEST=1DELETE OBSOLETE、CROSSCHECK 納入每日排程閃回區滿是典型的「空間換時間」失衡問題,緊急擴容救急,轉移歸檔路徑治本,配合自動化清理與監控,徹底杜絕復發。