RMAN (Recovery Manager) 是 Oracle 官方備份恢復工具,支援區塊級增量、壓縮、加密、目錄管理。本文聚焦數據文件級恢復,涵蓋兩大經典場景:誤刪除與磁碟損壞遷移,均採用 OPEN 狀態下恢復 (僅 SYSTEM 表空間需 MOUNT),將業務停機時間壓縮至最小。
OFFLINE → RESTORE → RECOVER → ONLINE。SET NEWNAME + SWITCH 導向新路徑。
# OS 層面刪除非 SYSTEM 表空間文件 (資料庫關閉狀態下)
rm $ORACLE_BASE/product/10.2.0/oradatabak/example01.dbf
# 啟動到 MOUNT
STARTUP MOUNT;
-- 確認損壞文件
SELECT file#, error FROM v$recover_file;
-- FILE# ERROR
-- 5 FILE NOT FOUND
SELECT file#, name FROM v$datafile WHERE file# = 5;
-- 5 /oracle/10g/oracle/product/10.2.0/oradatabak/example01.dbf
RMAN> RUN {
STARTUP FORCE MOUNT; -- 確保一致性掛載
SQL 'ALTER DATABASE DATAFILE 5 OFFLINE'; -- 脫機損壞文件
SQL 'ALTER DATABASE OPEN'; -- 開放資料庫,業務繼續
RESTORE DATAFILE 5; -- 從備份還原文件
RECOVER DATAFILE 5; -- 應用歸檔/線上日志
SQL 'ALTER DATABASE DATAFILE 5 ONLINE'; -- 聯機文件
}
STARTUP FORCE MOUNT:若實例已啟動則先 SHUTDOWN ABORT 再 MOUNT,確保乾淨狀態。SQL '...':RMAN 中執行 SQL 陳述式,需單引號包裹。RESTORE 自動從控制檔/目錄尋找最新可用備份片。RECOVER 自動應用所需歸檔日志與線上日志,直到一致性點。
# 同場景一,刪除文件模擬磁碟損壞
rm $ORACLE_BASE/product/10.2.0/oradatabak/example01.dbf
RMAN> RUN {
STARTUP FORCE MOUNT;
SQL 'ALTER DATABASE DATAFILE 5 OFFLINE';
SQL 'ALTER DATABASE OPEN';
-- 指定新路徑 (新磁碟/ASM/NFS)
SET NEWNAME FOR DATAFILE 5 TO '/oracle/10g/oracle/product/10.2.0/oradata/oralife/example01.dbf';
RESTORE DATAFILE 5; -- 還原至新路徑
SWITCH DATAFILE 5; -- 更新控制檔指向新路徑
RECOVER DATAFILE 5;
SQL 'ALTER DATABASE DATAFILE 5 ONLINE';
}
SQL> SELECT file#, name FROM v$datafile WHERE file# = 5;
FILE# NAME
5 /oracle/10g/oracle/product/10.2.0/oradata/oralife/example01.dbf
SQL> SELECT file#, error FROM v$recover_file;
no rows selected -- 無錯誤,恢復完成
RMAN> RUN {
STARTUP FORCE MOUNT;
SQL 'ALTER DATABASE DATAFILE 5,6,7 OFFLINE';
SQL 'ALTER DATABASE OPEN';
SET NEWNAME FOR DATAFILE 5 TO '/new/path/file5.dbf';
SET NEWNAME FOR DATAFILE 6 TO '/new/path/file6.dbf';
SET NEWNAME FOR DATAFILE 7 TO '/new/path/file7.dbf';
RESTORE DATAFILE 5,6,7;
SWITCH DATAFILE ALL; -- 所有在 RUN 區塊內 SET NEWNAME 的文件
RECOVER DATAFILE 5,6,7;
SQL 'ALTER DATABASE DATAFILE 5,6,7 ONLINE';
}
| 錯誤 | 原因 | 解決 |
|---|---|---|
| RMAN-06026: some targets not found | 控制檔/目錄無該文件備份記錄 | 檢查 LIST BACKUP OF DATAFILE n、確認備份保留策略、目錄同步 |
| ORA-01110 / ORA-01157 | 文件 OFFLINE 狀態不正確 | 確認 V$RECOVER_FILE 狀態、重新 OFFLINE/ONLINE |
| RMAN-03002 / ORA-19870 | FRA 空間不足無法還原 | 清理 FRA、調大 DB_RECOVERY_FILE_DEST_SIZE、指定 SET NEWNAME 至非 FRA 磁碟 |
| 恢復後數據不一致 | 缺少歸檔日志導致 RECOVER 不完整 | 確保備份策略含完整歸檔、啟用 CONFIGURE ARCHIVELOG DELETION POLICY |
RESTORE VALIDATE DATAFILE n 定期校驗備份片可讀性。V$RECOVER_FILE 有記錄即告警;RMAN 備份失敗即告警。