備份不是目的,可驗證的恢復才是。本文整理 Oracle 備份核心技巧:策略設計、RMAN 設定、排程自動化、異地複製、驗證機制、恢復演練、記錄檔管理,助您建立企業級備份體系。
| 層級 | 頻率 | 保留 | 目的 |
|---|---|---|---|
| Level 0 (基準) | 每週 1 次 | 4-8 週 | 完整資料庫快照 |
| Level 1 累積 | 每日 1 次 | 2-4 週 | 自 Level 0 以來所有變更,恢復只需 L0 + 最新 L1 累積 |
| 歸檔日誌 | 自動/每 15-60 分鐘 | 同 Level 1 保留期 | 時間點恢復 (PITR)、Data Guard 同步 |
| 控制檔/SPFILE | 每次結構變更後 | 同 Level 0 | 災難重建關鍵 |
核心原則:3-2-1 原則 — 3 份副本、2 種媒體 (磁帶/磁碟/雲端)、1 份異地。
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO COMPRESSED BACKUPSET;
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE BACKUP OPTIMIZATION ON; -- 跳過未變更檔案
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 30 DAYS;
CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 2 TIMES TO DEVICE TYPE DISK;
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/backup/snapcf.f';
RUN {
ALLOCATE CHANNEL d1 DEVICE TYPE DISK FORMAT '/backup/rman/%d_L0_%U.bkp';
ALLOCATE CHANNEL d2 DEVICE TYPE DISK FORMAT '/backup/rman/%d_L0_%U.bkp';
BACKUP INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG;
BACKUP CURRENT CONTROLFILE FORMAT '/backup/rman/%d_CTL_%U.bkp';
BACKUP SPFILE FORMAT '/backup/rman/%d_SPF_%U.bkp';
RELEASE CHANNEL d1;
RELEASE CHANNEL d2;
}
-- 異地複製 (rsync / scp / rclone / Cloud Provider CLI)
-- 例:rsync -avz /backup/rman/ dr-site:/backup/rman/
BACKUP VALIDATE DATABASE ARCHIVELOG ALL; — 檢查區塊損壞、可讀性,不產生備份片,可每日執行。RESTORE VALIDATE DATABASE; — 模擬恢復,驗證備份集完整性、解壓縮正確性。DBVERIFY、ANALYZE TABLE ... VALIDATE STRUCTURE CASCADE 定期掃描實體損壞。ALTER DATABASE ARCHIVELOG; — 否則無法 PITR、無法 Data Guard。LOG_ARCHIVE_DEST_1 指向獨立磁碟/ASM 磁碟組,非 FRA (Fast Recovery Area) 避免空間爭用。LOG_ARCHIVE_DEST_2 指向異地/雲端 (可選),啟用 LGWR ASYNC。CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 2 TIMES TO DEVICE TYPE DISK; — 確保備份完成前不被刪除。V$ARCHIVE_DEST_STATUS、V$FLASH_RECOVERY_AREA_USAGE,設定告警閾值 (80%)。| 場景 | 動作 |
|---|---|
| NOLOGGING 操作 (直載、建立索引、分區交換) | 操作結束後立即 Level 1 累積備份,否則該區塊無 Redo,恢復時會標記損壞 |
| 變更恢復模式 / 開關 ARCHIVELOG | 變更前後各做一次 Level 0 |
| SIMPLE 恢復模式 (非 Oracle 概念,指無歸檔) | 截斷日誌後必須完整備份,否則斷點無法恢復 |
| 資料庫升級/修補前 | 強制 Level 0 + 控制檔/SPFILE 備份 |
-- 完整恢復至最新
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN;
-- 時間點恢復 (PITR)
RUN {
SET UNTIL TIME "TO_DATE('2024-07-28 14:30:00','YYYY-MM-DD HH24:MI:SS')";
RESTORE DATABASE;
RECOVER DATABASE;
}
ALTER DATABASE OPEN RESETLOGS;
-- 表空間恢復 (TSPITR)
RECOVER TABLESPACE users UNTIL TIME '...' AUXILIARY DESTINATION '/tmp/aux';
-- 區塊級恢復 (BMR)
RECOVER DATAFILE 5 BLOCK 1234, 1235;
將備份納入持續驗證循環(備份 → 驗證 → 異地複製 → 演練 → 改進),而非排程跑完即算數,才能在災難來臨時從容應對。