錯誤現場重現
SQL> STARTUP
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
...
RMAN> RUN {
2> RESTORE DATABASE;
3> RECOVER DATABASE;
4> }
Starting restore at 06-FEB-09
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=156 devtype=DISK
released channel: ORA_DISK_1
-- 隱含:RESTORE 階段無輸出,可能無備份集或控制檔不匹配
關鍵錯誤訊號解讀
| 訊息 | 含義 | 可能原因 |
| ORA-01109: database not open | 嘗試操作需 OPEN 狀態的資料庫 | 資料庫處於 MOUNT/NOMOUNT,或啟動失敗 |
| ORACLE instance shut down | Instance 意外終止 | SHUTDOWN ABORT、背景進程異常、記憶體不足 |
| RMAN: connected to target database: ... NOT OPEN | 目標資料庫未 OPEN | 控制檔版本舊、資料檔 SCN 落後 |
| RESTORE 無資料檔輸出 | 未找到可用備份集 | 備份標籤錯誤、目錄未登錄、FRA 空間不足自動刪除 |
排查步驟 SOP
- 確認備份存在性:
RMAN> LIST BACKUP OF DATABASE SUMMARY;
RMAN> LIST BACKUP OF CONTROLFILE;
- 檢查控制檔版本:
SQL> SELECT checkpoint_change#, checkpoint_time FROM v$datafile_header;
若控制檔為備份控制檔,需 RECOVER DATABASE USING BACKUP CONTROLFILE 並以 ALTER DATABASE OPEN RESETLOGS 開啟。
- 驗證資料檔一致性:
RMAN> VALIDATE DATABASE;
- 檢查 Alert Log:尋找 ORA-600、ORA-7445、ORA-01578 等嚴重錯誤。
- 確認歸檔日志連續性:
RMAN> LIST ARCHIVELOG ALL;
缺口需從備份還原歸檔或採用不完整恢復。
常見恢復失敗模式與對策
| 模式 | 徵兆 | 對策 |
| 控制檔比資料檔新 | RESTORE 後 RECOVER 立即完成,但 OPEN 失敗 | 使用備份控制檔恢復 + RESETLOGS |
| 歸檔日志缺口 | RECOVER 掛住等待不存在的 Log Sequence | CANCEL-based 不完整恢復 / 從備份還原缺失歸檔 |
| 備份集過期/遺失 | LIST BACKUP 為空 / ORA-19625 | 檢查 RETENTION POLICY、FRA 空間、磁帶庫狀態 |
| 區塊損壞 | ORA-01578 / ORA-01110 | RMAN BLOCKRECOVER / 從備份還原該檔案 |
最佳實踐建議
- 啟用
CONFIGURE CONTROLFILE AUTOBACKUP ON。
- 定期
RESTORE VALIDATE / RECOVER VALIDATE 演練。
- 建立恢復腳本模板,納入版控,減少現場手動操作失誤。