本文記錄一次真實的 跨機器、跨儲存架構 (ASM → 檔案系統)、無目錄模式 的 RMAN 完整備份還原演練。源端:RAC + ASM;目標端:單機 + 檔案系統。全程記錄關鍵步驟、坑點與解決方案。
| 項目 | 源端 (Test01) | 目標端 (Test02) |
|---|---|---|
| IP | 192.1.11.140 | 192.1.11.141 |
| OS | RHEL 4.0 | RHEL 4.0 |
| Oracle | 10.2.0.1 | 10.2.0.1 |
| 架構 | 單實例 + ASM | 單實例 + 檔案系統 |
| 備份位置 | /racbackup (本地磁碟) | 拷貝至 /orabackup |
CONFIGURE CONTROLFILE AUTOBACKUP ON;
RUN {
ALLOCATE CHANNEL c1 TYPE DISK;
ALLOCATE CHANNEL c2 TYPE DISK;
ALLOCATE CHANNEL c3 TYPE DISK;
BACKUP AS COMPRESSED BACKUPSET DATABASE
FORMAT '/racbackup/bak/db_full_%T_%d_%t_%s_%p_bak0' TAG 'FullBackup';
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
BACKUP ARCHIVELOG ALL DELETE INPUT
FORMAT '/racbackup/bak/arch_%T_%d_%t_%s_%p_bak0';
BACKUP SPFILE INCLUDE CURRENT CONTROLFILE
FORMAT '/racbackup/bak/spfile_controlfile_%T_%d_%t_%s_%p_bak0';
RELEASE CHANNEL c1; RELEASE CHANNEL c2; RELEASE CHANNEL c3;
}
rman TARGET / NOCATALOG
RMAN> STARTUP NOMOUNT; -- 會報無參數檔,RMAN 會啟動虛擬實例
RMAN> RESTORE SPFILE FROM '/orabackup/bak/spfile_controlfile_20090724_BLUESKY_693063088_9_1_bak0';
SQL> CREATE PFILE FROM SPFILE;
SQL> SHUTDOWN ABORT;
-- 編輯 $ORACLE_HOME/dbs/init.ora
-- 刪除:cluster_database, instance_number, thread, local_listener,
-- db_create_file_dest, db_recovery_file_dest, control_files (ASM路徑) 等
-- 新增:control_files='/oradata/ccdb/control01.ctl' (檔案系統路徑)
SQL> CREATE SPFILE FROM PFILE;
SQL> STARTUP NOMOUNT;
RMAN> RESTORE CONTROLFILE FROM '/orabackup/bak/spfile_controlfile_20090724_BLUESKY_693063086_8_1_bak0';
RMAN> ALTER DATABASE MOUNT;
SQL> SELECT MEMBER FROM V$LOGFILE;
-- 輸出類似 +DG01/bluesky/onlinelog/group_1.270.693060487
SQL> ALTER DATABASE RENAME FILE '+DG01/bluesky/onlinelog/group_1.270.693060487' TO '/oradata/ccdb/redo01.log';
SQL> ALTER DATABASE RENAME FILE '+DG01/bluesky/onlinelog/group_2.271.693060491' TO '/oradata/ccdb/redo02.log';
SQL> ALTER DATABASE RENAME FILE '+DG01/bluesky/onlinelog/group_3.272.693060493' TO '/oradata/ccdb/redo03.log';
因備份路徑不同 (/racbackup vs /orabackup),必須重新登錄:
RMAN> CATALOG BACKUPPIECE '/orabackup/bak/db_full_20090724_BLUESKY_693062990_1_1_bak0';
RMAN> CATALOG BACKUPPIECE '/orabackup/bak/db_full_20090724_BLUESKY_693062990_2_1_bak0';
RMAN> CATALOG BACKUPPIECE '/orabackup/bak/arch_20090724_BLUESKY_693063080_4_1_bak0';
... (所有備份片段)
RMAN> CROSSCHECK BACKUP;
RMAN> DELETE NOPROMPT EXPIRED BACKUP;
RMAN> RESTORE DATABASE PREVIEW SUMMARY;
RMAN> RUN {
SET NEWNAME FOR DATAFILE 1 TO '/oradata/ccdb/system01.dbf';
SET NEWNAME FOR DATAFILE 2 TO '/oradata/ccdb/undotbs01.dbf';
SET NEWNAME FOR DATAFILE 3 TO '/oradata/ccdb/sysaux01.dbf';
SET NEWNAME FOR DATAFILE 4 TO '/oradata/ccdb/users01.dbf';
RESTORE DATABASE;
SWITCH DATAFILE ALL; -- 更新控制檔中資料檔路徑
}
RMAN> RUN {
SET ARCHIVELOG DESTINATION TO '/oradata/arch';
RESTORE ARCHIVELOG ALL;
}
RMAN> RECOVER DATABASE;
-- 會提示缺少下一條 Redo Log (thread 1 seq 10),因線上日誌未備份,屬正常
RMAN> ALTER DATABASE OPEN RESETLOGS;
LOG_ARCHIVE_DEST_1 指向新歸檔路徑OPEN RESETLOGS,會產生新 IncarnationSQL> SELECT * FROM t;
ID
----------
1
2
3
SQL> ARCHIVE LOG LIST;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /oradata/arch
Oldest online log sequence 0
Next log sequence to archive 1
Current log sequence 1
此次演練驗證了 RMAN 跨架構還原的完整可行性。關鍵在於:備份完整性、路徑映射 (SET NEWNAME/CATALOG)、參數檔淨化、RESETLOGS 開啟 四大支柱。建議每季度演練一次,確保災備真實有效。