繼數據文件級恢復後,本文進階講解表空間級恢復 (多文件批次) 與數據塊介質恢復 (Block Media Recovery, BMR)。表空間級恢復適用於整個表空間文件遺損/磁碟損壞;BMR 適用於極少數塊損壞 (如儲存轉軸錯誤、記憶體翻轉),無需恢復整個文件,極大縮短 RTO。
# OPEN 狀態下刪除 USERS 表空間所有文件
rm /oracle/10g/oracle/product/10.2.0/oradatabak/users01.dbf
-- 查詢受影響表
SELECT * FROM t_user;
-- ORA-00376: file 4 cannot be read at this time
RMAN> RUN {
SQL 'ALTER TABLESPACE USERS OFFLINE FOR RECOVER'; -- 表空間級 OFFLINE
RESTORE TABLESPACE USERS; -- 批次還原所有文件
RECOVER TABLESPACE USERS; -- 批次應用日志
SQL 'ALTER TABLESPACE USERS ONLINE'; -- 表空間級 ONLINE
}
OFFLINE FOR RECOVER:專為恢復設計的 OFFLINE 模式,不需檢查點,恢復後直接 ONLINE,無需 RECOVER TABLESPACE ... NOCHECK。RESTORE/RECOVER TABLESPACE 會自動展開該表空間所有數據文件,逐一處理。
# 同場景一,刪除文件
rm /oracle/10g/oracle/product/10.2.0/oradatabak/users01.dbf
RMAN> RUN {
SQL 'ALTER TABLESPACE USERS OFFLINE FOR RECOVER';
-- 為每個文件指定新路徑 (可查詢 V$DATAFILE 確認 FILE#)
SET NEWNAME FOR DATAFILE 4 TO '/oracle/10g/oracle/product/10.2.0/oradata/oralife/user01.dbf';
RESTORE TABLESPACE USERS;
SWITCH DATAFILE ALL; -- 更新控制檔中所有在本 RUN 內 SET NEWNAME 的文件
RECOVER TABLESPACE USERS;
SQL 'ALTER TABLESPACE USERS ONLINE';
}
SQL> SELECT * FROM t_user;
TEXT
Java_
SQL> SELECT name FROM v$datafile WHERE file# = 4;
NAME
/oracle/10g/oracle/product/10.2.0/oradata/oralife/user01.dbf
ORA-01578、ORA-01115、ORA-19504。V$DATABASE_BLOCK_CORRUPTION、DBVERIFY、RMAN VALIDATE 發現。
RMAN> BLOCKRECOVER DEVICE TYPE DISK
2> DATAFILE 5 BLOCK 2, 7, 88;
DEVICE TYPE DISK:從磁碟備份讀取 (預設),亦可 SBT_TAPE。DATAFILE n BLOCK b1, b2, ...。
-- 1. 掃描損壞塊
RMAN> VALIDATE CHECK LOGICAL DATABASE;
-- 或特定文件
RMAN> VALIDATE CHECK LOGICAL DATAFILE 5;
-- 2. 查看損壞塊報告
SELECT * FROM V$DATABASE_BLOCK_CORRUPTION;
-- 3. 執行 BMR
RMAN> BLOCKRECOVER CORRUPTION LIST; -- 自動修復 VALIDATE 發現的所有損壞塊
-- 或指定
RMAN> BLOCKRECOVER DATAFILE 5 BLOCK 100, 205, 300;
-- 4. 驗證修復
RMAN> VALIDATE DATAFILE 5;
| 限制 | 說明 |
|---|---|
| 僅支援資料塊 | 不支援段頭、Undo 塊、控制檔塊、Redo 日志塊損壞修復 |
| 需完整備份基線 | 需有包含目標塊的完整備份 (Level 0),增量備份需配合 |
| 實例需 OPEN | 資料庫必須 OPEN 或 MOUNT (Open 時不影響其他業務) |
| RAC 環境 | 需在損壞塊所在實例執行,或使用 CLONE DATABASE 旁路恢復 |
故障發生
│
├─ 整個表空間所有文件遺損/磁碟壞 → TABLESPACE RESTORE + RECOVER
│
├─ 少數文件遺損/磁碟壞 → DATAFILE RESTORE + RECOVER (+ SET NEWNAME)
│
├─ 極少數塊損壞 (ORA-1578) → BLOCKRECOVER (BMR)
│
└─ SYSTEM/UNDO 表空間文件遺損 → 必須 MOUNT 狀態恢復 (全庫停機)
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING; 加速增量備份,間接提升 BMR 可用備份點密度。RMAN VALIDATE CHECK LOGICAL DATABASE 主動發現潛在損壞塊,趁早修復。CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS; 確保 BMR 所需備份未過期刪除。DBVERIFY 製造損壞塊)。