首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle RMAN 異機備份還原實戰:ASM 轉檔案系統完整演練

     編輯:Oracle 資料庫基礎

前言

本文記錄一次真實的 跨機器、跨儲存架構 (ASM → 檔案系統)、無目錄模式 的 RMAN 完整備份還原演練。源端:RAC + ASM;目標端:單機 + 檔案系統。全程記錄關鍵步驟、坑點與解決方案。

一、環境與備份策略

項目源端 (Test01)目標端 (Test02)
IP192.1.11.140192.1.11.141
OSRHEL 4.0RHEL 4.0
Oracle10.2.0.110.2.0.1
架構單實例 + ASM單實例 + 檔案系統
備份位置/racbackup (本地磁碟)拷貝至 /orabackup

RMAN 備份腳本關鍵點

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;
}

二、還原全流程 (目標端執行)

階段 1:啟動 NOMOUNT 並還原 SPFILE

rman TARGET / NOCATALOG
RMAN> STARTUP NOMOUNT;  -- 會報無參數檔,RMAN 會啟動虛擬實例
RMAN> RESTORE SPFILE FROM '/orabackup/bak/spfile_controlfile_20090724_BLUESKY_693063088_9_1_bak0';

階段 2:轉換 PFILE 移除 RAC/ASM 參數

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;

階段 3:還原控制檔並 MOUNT

RMAN> RESTORE CONTROLFILE FROM '/orabackup/bak/spfile_controlfile_20090724_BLUESKY_693063086_8_1_bak0';
RMAN> ALTER DATABASE MOUNT;

階段 4:重新指定線上 Redo Log 路徑 (ASM → 檔案系統)

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';

階段 5:登錄備份片段 (CATALOG) — 關鍵步驟

因備份路徑不同 (/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';
... (所有備份片段)

階段 6:清理過期備份記錄

RMAN> CROSSCHECK BACKUP;
RMAN> DELETE NOPROMPT EXPIRED BACKUP;

階段 7:預覽還原需求

RMAN> RESTORE DATABASE PREVIEW SUMMARY;

階段 8:設定 NEWNAME 並還原資料檔 (ASM → 檔案系統)

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;  -- 更新控制檔中資料檔路徑
}

階段 9:還原歸檔日誌至指定目錄

RMAN> RUN {
  SET ARCHIVELOG DESTINATION TO '/oradata/arch';
  RESTORE ARCHIVELOG ALL;
}

階段 10:介質恢復與 OPEN RESETLOGS

RMAN> RECOVER DATABASE;
-- 會提示缺少下一條 Redo Log (thread 1 seq 10),因線上日誌未備份,屬正常
RMAN> ALTER DATABASE OPEN RESETLOGS;

階段 11:後續收尾

  • 重建臨時表空間 (源端 ASM 臨時檔案未備份)
  • 修改 LOG_ARCHIVE_DEST_1 指向新歸檔路徑
  • 驗證業務資料完整性

三、核心避坑指南

  1. 備份腳本順序: 建議「資料檔 → 歸檔日誌 → SPFILE/控制檔」,避免控制檔備份過早導致歸檔記錄缺失
  2. CATALOG 步驟不可省略: 跨路徑還原必須重新登錄備份片段
  3. SET NEWNAME 必須在 RESTORE 之前: 否則還原至原 ASM 路徑報錯
  4. 線上 Redo Log 遺失 = 不完整恢復: 必須 OPEN RESETLOGS,會產生新 Incarnation
  5. 參數檔轉換: PFILE 編輯務必移除所有 RAC/ASM 相關參數,否則啟動失敗

四、驗證結果

SQL> 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 開啟 四大支柱。建議每季度演練一次,確保災備真實有效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved