Recovery Manager (RMAN) 是 Oracle 原生的物理備份與恢復管理工具,自 Oracle 8 起引入,現為企業級備份標準。核心優勢:
| 類型 | 定義 | 特點 | 用途 |
|---|---|---|---|
| FULL (完整) | 所有已使用區塊 | 基礎備份,不依賴其他 | Level 0 基礎、獨立完整備份 |
| INCREMENTAL LEVEL 0 | 同 FULL,但可作增量基礎 | 增量鏈起點 | 累積/差異增量基礎 |
| INCREMENTAL LEVEL 1 | 自上次 Level 0/1 變更區塊 | 差異 (預設) / 累積 (CUMULATIVE) | 每日增量備份 |
| INCREMENTAL LEVEL 2-4 | 多級增量 (罕用) | 最多 4 級 | 極精細 RPO 需求 |
| OPEN (線上) | 資料庫 OPEN 狀態 | 需 ARCHIVELOG,可能不一致 | 生產環境標準 |
| CLOSED (掛載) | 資料庫 MOUNT 未 OPEN | 一致性備份 (乾淨關閉後) | 維護窗口、非歸檔模式 |
| CONSISTENT | 乾淨關閉後 MOUNT 備份 | 還原即可 OPEN,無需 RECOVER | 快速部署/克隆 |
| INCONSISTENT | OPEN 或非乾淨關閉後 MOUNT | 還原後必須 RECOVER | 線上備份常態 |
# 備份
BACKUP DATABASE PLUS ARCHIVELOG;
BACKUP INCREMENTAL LEVEL 1 DATABASE;
BACKUP TABLESPACE users;
BACKUP ARCHIVELOG ALL DELETE INPUT;
# 還原 (將備份檔寫回資料檔位置)
RESTORE DATABASE;
RESTORE TABLESPACE users;
RESTORE CONTROLFILE FROM AUTOBACKUP;
# 恢復 (應用重做/歸檔使資料一致)
RECOVER DATABASE;
RECOVER TABLESPACE users;
RECOVER DATABASE UNTIL TIME 'SYSDATE-1';
CROSSCHECK、DELETE EXPIRED、REPORT 等命令受限-- 1. 目標資料庫建立表空間與用戶
CREATE TABLESPACE rman_cat DATAFILE '+DATA' SIZE 1G AUTOEXTEND ON;
CREATE USER rman IDENTIFIED BY rman_pass DEFAULT TABLESPACE rman_cat TEMPORARY TABLESPACE temp;
GRANT CONNECT, RESOURCE, RECOVERY_CATALOG_OWNER TO rman;
-- 2. 連接目錄資料庫建立目錄
RMAN> CONNECT CATALOG rman/rman_pass@RCAT_DB;
RMAN> CREATE CATALOG TABLESPACE rman_cat;
-- 3. 註冊目標資料庫
RMAN> CONNECT TARGET sys/pwd@PROD CATALOG rman/rman_pass@RCAT_DB;
RMAN> REGISTER DATABASE;
-- 4. 定期同步 (結構變更後)
RMAN> RESYNC CATALOG;
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK FORMAT '/backup/rman/%d_L0_%U';
ALLOCATE CHANNEL c2 DEVICE TYPE DISK FORMAT '/backup/rman/%d_L0_%U';
ALLOCATE CHANNEL c3 DEVICE TYPE DISK FORMAT '/backup/rman/%d_L0_%U';
BACKUP INCREMENTAL LEVEL 0
TAG 'L0_BASE'
DATABASE
INCLUDE CURRENT CONTROLFILE
PLUS ARCHIVELOG;
RELEASE CHANNEL c1;
RELEASE CHANNEL c2;
RELEASE CHANNEL c3;
}
# 維護
CROSSCHECK BACKUP;
DELETE NOPROMPT OBSOLETE;
DELETE NOPROMPT EXPIRED BACKUP;
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK FORMAT '/backup/rman/%d_L1_%U';
ALLOCATE CHANNEL c2 DEVICE TYPE DISK FORMAT '/backup/rman/%d_L1_%U';
BACKUP INCREMENTAL LEVEL 1 CUMULATIVE
TAG 'L1_DAILY'
DATABASE
PLUS ARCHIVELOG;
RELEASE CHANNEL c1;
RELEASE CHANNEL c2;
}
CROSSCHECK BACKUP;
DELETE NOPROMPT OBSOLETE;
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK FORMAT '/backup/rman/ARCH_%U';
BACKUP ARCHIVELOG ALL
DELETE INPUT
TAG 'ARCH_HOURLY'
FORMAT '/backup/rman/ARCH_%U';
RELEASE CHANNEL c1;
}
CROSSCHECK ARCHIVELOG ALL;
| 操作 | 命令 | 說明 |
|---|---|---|
| 列出備份 | LIST BACKUP [SUMMARY]; | 查看備份集/片詳細資訊 |
| 列出歸檔 | LIST ARCHIVELOG ALL; | |
| 報告過期 | REPORT OBSOLETE; | 根據保留策略判定過期 |
| 報告需備份 | REPORT NEED BACKUP; | 未滿足保留策略的檔案 |
| 驗證備份 | VALIDATE BACKUPSET | 檢查備份集完整性 (不還原) |
| 刪除過期 | DELETE EXPIRED BACKUP; | 刪除儲存庫中標記過期但實體存在的 |
| 刪除過時 | DELETE OBSOLETE; | 刪除實體檔案並更新儲存庫 |
| 交叉檢查 | CROSSCHECK BACKUP; | 比對儲存庫與實體檔案狀態 |
| 同步目錄 | RESYNC CATALOG; | 目標結構變更後必執行 |
-- 壓縮備份 (11g+)
BACKUP AS COMPRESSED BACKUPSET DATABASE;
-- 加密備份 (10g+)
SET ENCRYPTION ON IDENTIFIED BY 'password' ONLY;
BACKUP DATABASE;
-- 或透明模式 (需錢包)
CONFIGURE ENCRYPTION FOR DATABASE ON;
-- 限制備份時間/負載 (10g+)
BACKUP DURATION 2:00 MINIMIZE LOAD DATABASE;
BACKUP DURATION 4:00 PARTIAL MINIMIZE TIME DATABASE;
目錄資料庫雖小但關鍵,建議每次 RMAN 備份後同步導出:
# expdp 導出目錄 Schema
expdp rman/rman_pass@RCAT_DB \
SCHEMAS=RMAN \
DIRECTORY=DPUMP_DIR \
DUMPFILE=rman_cat_%DATE%.dmp \
LOGFILE=rman_cat_exp.log \
COMPRESSION=ALL
| 錯誤 | 原因 | 解決 |
|---|---|---|
| RMAN-06059: expected archived log not found | 歸檔遺失/未備份 | CROSSCHECK ARCHIVELOG; 從備份恢復歸檔 |
| ORA-19504: failed to create file | 路徑/權限/空間/MAXPIECESIZE | 檢查檔案系統、增加 MAXPIECESIZE |
| ORA-19809: FRA space limit exceeded | FRA 滿 | 擴大 FRA、刪除過期、備份到磁帶 |
| RMAN-03002: failure of backup command | 通用失敗 | 查看完整錯誤堆疊、檢查 ALERT LOG |
| ORA-01152: file not restored from old enough backup | 基礎備份缺失/過期 | 確保 Level 0 存在且未被 OBSOLETE 刪除 |
RMAN 是 Oracle 備份的核心引擎。掌握備份類型語義、目錄管理、三大核心命令、保留策略與實戰腳本模板,能構建企業級、可審計、可驗證的備份體系。關鍵成功因素:FRA 規劃、目錄資料庫高可用、定期 RESTORE VALIDATE 演練、異地備份副本。