使用RMAN從遷移數據到Linux
由于與Linux同屬于 平臺,所以平臺RMAN數據庫備份可以在Linux直接使用,但是平臺下的歸檔日志無法在Linux平臺直接用于 ,但是我們可以使用增量備份解決增量問題,然后最后在源庫停機下做最后備份,減少源庫停機時間。
1. 基礎數據備份恢復
1.1 源端 做0級備份
# 下面僅給出示例,實際命令與并行度需要根據實際服務器負載以及磁盤能力配置。
RMAN> as level 0 'd:\\%d_%T_%s_%p' tag '';
RMAN> 'd:\\%d_%T_%s_%p' tag '';
1.2 Linux端恢復0級備份
# 恢復與修改pfile中參數、上傳備份集到Linux服務器等基礎步驟略過,下面僅演示恢復過程
RMAN> ;
RMAN> from '/rman//CTL.BAK';
RMAN> alter mount;
# 清理控制文件記錄的原來備份信息記錄
RMAN> ;
RMAN> ;
# 重新將備份片注冊到控制文件記錄中
RMAN> start with '/rman//';
# 數據庫0級備份
RMAN>run{
set for to '///%U.dbf'; # 如果需要與源文件名保持一致oracle數據文件遷移方法,則可以為每個單獨set
set for '+DATA/czh//temp.264.' to '///temp.264.';
;
all;
all;
}
2. 增量數據恢復
2.1 源端做1級備份
RMAN> as level 1 'd:\\%d_%T_%s_%p' tag '';
2.2 Linux端恢復1級備份
# 增量恢復,只應用增量備份即可
RMAN> start with '/rman//';
RMAN> ;
2.3 停機窗口最后一次1級備份
停機窗口前,可以根據需要,每天,每隔幾小時定時重復執行上述2.1、2.2步驟,可以大幅度減少最后一次增量備份以及恢復的時間,縮短停機時間。
# 由于Linux無法直接應用平臺下歸檔,所以需要在停機窗口干凈關閉數據庫,啟動到mount狀態
SQL> table test as * from ; # 創建測試表,以便最后驗證數據是否完全恢復
RMAN> ;
RMAN> mount;
RMAN> as level 1 'd:\\%d_%T_%s_%p' tag '';
# 需要在mount下重新備份最新的控制文件oracle數據文件遷移方法,以便最后保證最后恢復的數據文件頭以及控制文件SCN保持一致。
RMAN> 'd:\\%d_%T_%s_%p' tag '';
2.4 Linux端恢復
# 直接恢復最后一次增量
RMAN> start with '/rman//';
RMAN> ;
# 應用完最后一次增量之后,重新恢復最新控制文件,保證數據文件與控制文件記錄SCN保持一致。
# 這步是保證數據庫能一致性打開的關鍵,如果不回復mount后備份的控制文件則無法打開數據庫。
RMAN> ;
RMAN> ;
RMAN> ;
RMAN> from '/rman//.BAK';
RMAN> alter mount;
# 由于新恢復的源端控制文件,清理控制文件中記錄的原先備份片信息
RMAN> ;
RMAN> ;
# 由于控制文件新恢復,所以原先的數據文件路徑需要重新注冊到控制文件,然后
RMAN> start with '//orcl';
RMAN> to copy;
# open read only,驗證測試表
RMAN> alter open read only;
SQL> desc test;
# 檢查redo log位置,檢查位置,如有需要,修正文件位置
SQL> from v$;
SQL> name from v$;
# 修正redo舉例,可以直接添加新的然后drop舊的即可。
SQL> alter file '/u01/app///11.2.0///db2/.log' TO '+DATA/db2//.275.';
# 驗證無誤,可以open打開數據庫
SQL> alter open ;
2.5 恢復后收尾工作
對Linux數據庫進行全量備份。
檢查數據庫db link、等對環境有強依賴對象是否無效,如有必要,進行重建修正。