生產環境為 2 節點 RAC + ASM,測試環境為 單機 + 檔案系統。本文詳細記錄將 RAC 備份集在單機上完整還原的每一步操作、參數調整與避坑細節,供同行參考。
| 項目 | 生產端 (IBM4/IBM5) | 測試端 (IBM1) |
|---|---|---|
| 架構 | RAC (2 節點) | 單實例 |
| 儲存 | ASM (+ASMDISK) | 檔案系統 (/oradata) |
| Oracle | 10.2.0.3 | 10.2.0.3 |
| OS | AIX 5.3 TL7 | AIX 5.3 TL7 |
| SID | ccdb1 / ccdb2 | ccdb1 |
| 備份腳本 | /orabak/script/backup_ccdb_inc_0.script | 拷貝備份集至 /oradata/orabak |
/oradata/orabak/
├── databackup/
│ └── db_CCDB_900_1_20080620 # 資料檔備份片段
├── logbackup/
│ └── log_CCDB_901_1_20080620 # 歸檔日誌備份片段
└── rmanspctlback/
└── c-3276392049-20080620-01 # SPFILE + 控制檔自動備份
vi ~/.profile
export ORACLE_SID=ccdb1
rman TARGET /
RMAN> STARTUP NOMOUNT; -- 報錯無參數檔,RMAN 啟動虛擬實例
RMAN> RESTORE SPFILE FROM '/oradata/orabak/rmanspctlback/c-3276392049-20080620-01';
SQL> CREATE PFILE FROM SPFILE;
SQL> SHUTDOWN ABORT;
-- 編輯 $ORACLE_HOME/dbs/initccdb1.ora
-- 【必刪參數】cluster_database, cluster_database_instances, instance_number, thread,
-- local_listener, remote_listener, db_create_file_dest, db_recovery_file_dest,
-- control_files (ASM路徑), undo_tablespace (針對實例), *_instance 等
-- 【新增/修改】control_files='/oradata/ccdb/control01.ctl'
-- log_archive_dest_1='LOCATION=/oralog/ccdb/'
SQL> CREATE SPFILE FROM PFILE;
SQL> STARTUP NOMOUNT;
| 原始 RAC 參數 | 單機修改後 |
|---|---|
| *.cluster_database=true | 刪除 |
| *.control_files='+ASMDISK/...' | *.control_files='/oradata/ccdb/control01.ctl' |
| *.db_create_file_dest='+ASMDISK' | 刪除 |
| ccdb1.undo_tablespace='UNDOTBS1' | *.undo_tablespace='UNDOTBS1' (去實例前綴) |
| ccdb1.thread=1 | 刪除 |
RMAN> RESTORE CONTROLFILE FROM '/oradata/orabak/rmanspctlback/c-3276392049-20080620-01';
RMAN> ALTER DATABASE MOUNT;
SQL> SELECT MEMBER FROM V$LOGFILE;
-- 輸出 12 行 (6 組 × 2 members),全為 +ASMDISK/ccdb/onlinelog/...
SQL> ALTER DATABASE RENAME FILE '+ASMDISK/ccdb/onlinelog/group_1.262.648572915' TO '/oradata/ccdb/redo0101.log';
SQL> ALTER DATABASE RENAME FILE '+ASMDISK/ccdb/onlinelog/group_1.263.648572917' TO '/oradata/ccdb/redo0102.log';
SQL> ALTER DATABASE RENAME FILE '+ASMDISK/ccdb/onlinelog/group_2.264.648572917' TO '/oradata/ccdb/redo0201.log';
SQL> ALTER DATABASE RENAME FILE '+ASMDISK/ccdb/onlinelog/group_2.265.648572919' TO '/oradata/ccdb/redo0202.log';
SQL> ALTER DATABASE RENAME FILE '+ASMDISK/ccdb/onlinelog/group_3.266.648572919' TO '/oradata/ccdb/redo0301.log';
SQL> ALTER DATABASE RENAME FILE '+ASMDISK/ccdb/onlinelog/group_3.267.648572919' TO '/oradata/ccdb/redo0302.log';
... (group_4 ~ group_6 同理)
RMAN> CATALOG BACKUPPIECE '/oradata/orabak/databackup/db_CCDB_900_1_20080620';
RMAN> CATALOG BACKUPPIECE '/oradata/orabak/logbackup/log_CCDB_901_1_20080620';
RMAN> CROSSCHECK BACKUP;
RMAN> DELETE NOPROMPT EXPIRED BACKUP;
RMAN> RESTORE DATABASE PREVIEW SUMMARY;
-- 輸出:Media recovery start SCN 26818078494, 必須恢復超過此 SCN
RMAN> REPORT SCHEMA;
-- 輸出 7 個永久資料檔 (檔號 1~7) + 1 個臨時檔,路徑均為 +ASMDISK/...
RMAN> RUN {
ALLOCATE CHANNEL d1 TYPE DISK;
SET NEWNAME FOR DATAFILE 1 TO '/oradata/ccdb/system.dbf';
SET NEWNAME FOR DATAFILE 2 TO '/oradata/ccdb/undotbs1.dbf';
SET NEWNAME FOR DATAFILE 3 TO '/oradata/ccdb/sysaux.dbf';
SET NEWNAME FOR DATAFILE 4 TO '/oradata/ccdb/users.dbf';
SET NEWNAME FOR DATAFILE 5 TO '/oradata/ccdb/undotbs2.dbf';
SET NEWNAME FOR DATAFILE 6 TO '/oradata/ccdb/unicall2x.dbf';
SET NEWNAME FOR DATAFILE 7 TO '/oradata/ccdb/unicall2x_idx.dbf';
RESTORE DATABASE;
SWITCH DATAFILE ALL;
RELEASE CHANNEL d1;
}
RMAN> RECOVER DATABASE;
-- 輸出:thread 2 sequence 688 缺失 (線上日誌未備份),屬正常
-- 此時 SCN 已超過 26818078494,滿足一致性要求
RMAN> ALTER DATABASE OPEN RESETLOGS;
-- 成功開啟,產生新 Incarnation
LOG_ARCHIVE_DEST_1 指向新歸檔路徑RMAN> RUN {
ALLOCATE CHANNEL d1 TYPE DISK;
SET NEWNAME FOR DATAFILE 1 TO '/oradata/ccdb/system.dbf';
SET NEWNAME FOR DATAFILE 2 TO '/oradata/ccdb/undotbs1.dbf';
SET NEWNAME FOR DATAFILE 3 TO '/oradata/ccdb/sysaux.dbf';
SET NEWNAME FOR DATAFILE 4 TO '/oradata/ccdb/users.dbf';
SET NEWNAME FOR DATAFILE 5 TO '/oradata/ccdb/undotbs2.dbf';
SET NEWNAME FOR DATAFILE 6 TO '/oradata/ccdb/unicall2x.dbf';
SET NEWNAME FOR DATAFILE 7 TO '/oradata/ccdb/unicall2x_idx.dbf';
-- 同步重命名線上日誌
SQL "ALTER DATABASE RENAME FILE ''+ASMDISK/ccdb/onlinelog/group_1.262.648572915'' TO ''/oradata/ccdb/redo0101.log''";
SQL "ALTER DATABASE RENAME FILE ''+ASMDISK/ccdb/onlinelog/group_1.263.648572917'' TO ''/oradata/ccdb/redo0102.log''";
... (其餘 10 個 members)
RESTORE DATABASE;
SWITCH DATAFILE ALL;
RELEASE CHANNEL d1;
}
RMAN> LIST INCARNATION OF DATABASE;
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- ------- ---------- ------- ----------- ----------
1 1 CCDB 3276392049 PARENT 1 2006-11-20
2 2 CCDB 3276392049 PARENT 561064 2008-03-05
3 3 CCDB 3276392049 CURRENT 26818080042 2008-06-27 16:32:25 <-- 新 Incarnation
RAC + ASM 到單機檔案系統的還原,核心難點在於 參數檔轉換、路徑映射 (SET NEWNAME + RENAME FILE)、備份片段重登錄 (CATALOG)、RESETLOGS 開啟 四大環節。建議將上述步驟封裝為標準化 Runbook,每季演練一次,確保災備程序真實可用。