Oracle數據庫離線增量備份與恢復
oracle數據庫離線增量備份與恢復
項目背景:
客戶數據庫版本為Oracle 11G 11.2.0.4版本;
客戶Oracle數據庫業務需要上云,數據量較大,RMAN備份后,備份集約有1T左右;
客戶希望盡可能減少業務停機時間;
客戶Oracle數據庫在內網,無法直通公網;
遷移方案:
因為客戶的Oracle數據庫無法直連公網,所以只能采用離線遷移方式;
為減少業務停機時間,本方案使用RMAN備份,分全量和增量兩個備份集,分別上傳到公有云;
全量備份時間較長,定在凌晨 01:00開始,備份完成后通過其它主機上傳到華為云;
客戶公網帶寬為500Mbps,傳輸速度約50MB左右,完成1TB的備份集數據傳輸,約需要6個小時;
全量備份執行、全量備份集上傳,均無法業務中斷,待全量備份集在云上恢復完成后,再在線下停業務、增量備份、上傳增量備份集、云上恢復增量備份集;
遷移方案拓撲簡圖如下所示:
遷移過程:
# 在客戶業務環境,執行Oracle數據庫全量備份;
# 備份腳本如下:
$ more full_orcl.sh
echo -e '******Start********_'$(date '+%Y%m%d%H%M%S')
export ORACLE_SID=orcl
export ORACLE_BASE=/oracle/app
export ORACLE_HOME=/oracle/app/product/11.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
rman target /< run{ allocate channel c1 type disk; backup as compressed backupset incremental level 0 tag 'orcl_incr_L0' format '/rmanbak/full_bak/orcl/full_%d_%T_%s' database include current controlfile; sql "alter system archive log current"; backup as compressed backupset archivelog all format '/rmanbak/full_bak/orcl/arclog_0_%s_%p_%t_%d' delete input; crosscheck backup; delete noprompt expired backup; delete noprompt obsolete; crosscheck archivelog all; delete noprompt expired archivelog all; release channel c1; } exit; EOF # 執行數據庫備份腳本: $ ./full_orcl.sh # 備份集通過客戶公網,直接上傳到華為云; # 通過在客戶主機上安裝華為云obsutils,直接將備份集上傳到華為云OBS桶; # 上傳過程略; 注:云上數據庫環境需要提前部署好; 僅需要安裝好Oracle數據庫軟件即可,無需建庫; 通過在源數據庫,查看rman備份,確認全量備份集中,哪個備份文件中包含參數文件、控制文件,下面會用到; $ rman target / RMAN> startup nomount; RMAN> restore spfile from '/rmanbak/full_bak/orcl/full_ORCL_20210311_15'; # 使用新恢復出來的參數文件,重啟數據庫 RMAN> shutdown immediate; RMAN> startup nomount; RMAN> restore controlfile from '/rmanbak/full_bak/orcl/full_ORCL_20210311_15'; RMAN> alter database mount; RMAN> restore database; # 注:需要注意,要把全量備份集的所有磁盤文件,都catalog到rman中: RMAN> catalog start with '/rmanbak/full_bak/orcl/'; RMAN> recover database; Starting recover at 11-MAR-21 using channel ORA_DISK_1 starting media recovery channel ORA_DISK_1: starting archived log restore to default destination channel ORA_DISK_1: restoring archived log archived log thread=1 sequence=297 channel ORA_DISK_1: restoring archived log archived log thread=1 sequence=298 channel ORA_DISK_1: reading from backup piece /rmanbak/full_bak/orcl/arclog_0_16_1_1066925664_ORCL channel ORA_DISK_1: piece handle=/rmanbak/full_bak/orcl/arclog_0_16_1_1066925664_ORCL tag=TAG20210311T161424 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 archived log file name=/oracle/app/fast_recovery_area/ORCL/archivelog/2021_03_11/o1_mf_1_297_j4mobbwl_.arc thread=1 sequence=297 channel default: deleting archived log(s) archived log file name=/oracle/app/fast_recovery_area/ORCL/archivelog/2021_03_11/o1_mf_1_297_j4mobbwl_.arc RECID=8 STAMP=1066926666 archived log file name=/oracle/app/fast_recovery_area/ORCL/archivelog/2021_03_11/o1_mf_1_298_j4mobbxm_.arc thread=1 sequence=298 channel default: deleting archived log(s) archived log file name=/oracle/app/fast_recovery_area/ORCL/archivelog/2021_03_11/o1_mf_1_298_j4mobbxm_.arc RECID=7 STAMP=1066926666 unable to find archived log archived log thread=1 sequence=299 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of recover command at 03/11/2021 16:31:08 RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 299 and starting SCN of 6324617 # 注:在此處,我們需要將數據庫歸檔日志,恢復到備份時刻的最后一個日志號; # 根據上面錯誤提示,我們在recover時,需要指定thread=1 sequence=299; # 再次執行recover: RMAN> run { set until sequence 299 thread 1; recover database; } # 執行recover成功; # 說明:因為后續還需要繼續恢復增量備份集,所以此處切不可對數據庫進行resetlogs操作; # 在此處可以簡單確認恢復的數據是否可讀; # 不可以對數據庫進行resetlogs操作,可以以read only方式打開,做簡單查詢: $ sqlplus "/as sysdba" SQL> alter database open read only; SQL> select count(*) from xxx.xxxxx; # 確認業務數據可以正常查詢即可 # 基于數據一致性考慮,最后一次增量備份之前,源端環境就不能有新增的數據了; # 所以需要在源端將業務系統停機; # Oracle數據庫,需要確認已經沒有客戶連接session在連接,并關閉監聽; $ lsnrctl stop $ netstat -ntlp | grep 1521 # 在客戶業務環境,執行Oracle數據庫增量備份; # 備份腳本如下: $ more incr_orcl.sh echo -e '******Start********_'$(date '+%Y%m%d%H%M%S') export ORACLE_SID=orcl export ORACLE_BASE=/oracle/app export ORACLE_HOME=/oracle/app/product/11.2.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH rman target /< run{ allocate channel c1 type disk; backup as compressed backupset incremental level 1 tag 'orcl_incr_L1' format '/rmanbak/incr_bak/orcl/incr_%d_%T_%s' database include current controlfile; sql "alter system archive log current"; backup as compressed backupset archivelog all format '/rmanbak/incr_bak/orcl/arclog_1_%s_%p_%t_%d' delete input; crosscheck backup; delete noprompt expired backup; delete noprompt obsolete; crosscheck archivelog all; delete noprompt expired archivelog all; release channel c1; } exit; EOF # 執行數據庫備份腳本: $ ./incr_orcl.sh 上傳過程此處不再贅述; # 將數據庫啟動到mount狀態: $ rman target / RMAN> shutdown immediate RMAN> startup mount # 將增量備份集catalog到rman: RMAN> catalog start with '/rmanbak/incr_bak/orcl/'; # 通過以下命令,確認備份集的最后一個歸檔日志: RMAN> recover database; Starting recover at 11-MAR-21 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=63 device type=DISK channel ORA_DISK_1: starting incremental datafile backup set restore channel ORA_DISK_1: specifying datafile(s) to restore from backup set destination for restore of datafile 00001: /oracle/app/oradata/orcl/system01.dbf destination for restore of datafile 00002: /oracle/app/oradata/orcl/sysaux01.dbf destination for restore of datafile 00003: /oracle/app/oradata/orcl/undotbs01.dbf destination for restore of datafile 00004: /oracle/app/oradata/orcl/users01.dbf destination for restore of datafile 00005: /oracle/app/oradata/orcl/TABLESPACE.dbf destination for restore of datafile 00006: /oracle/app/oradata/orcl/TBS_SHMSA01.dbf destination for restore of datafile 00007: /oracle/app/oradata/orcl/SSDD_TBS01.dbf destination for restore of datafile 00008: /oracle/app/oradata/orcl/SYNC_XUANCHUAN_TBS01.dbf destination for restore of datafile 00009: /oracle/app/oradata/orcl/MarShareL201.dbf destination for restore of datafile 00010: /oracle/app/oradata/orcl/MSAPUB_DATA01.dbf destination for restore of datafile 00011: /oracle/app/oradata/orcl/MLP_SHCORPUS01.dbf channel ORA_DISK_1: reading from backup piece /rmanbak/incr_bak/orcl/incr_ORCL_20210311_17 channel ORA_DISK_1: piece handle=/rmanbak/incr_bak/orcl/incr_ORCL_20210311_17 tag=OADB_INCR_L1 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 starting media recovery channel ORA_DISK_1: starting archived log restore to default destination channel ORA_DISK_1: restoring archived log archived log thread=1 sequence=299 channel ORA_DISK_1: restoring archived log archived log thread=1 sequence=300 channel ORA_DISK_1: reading from backup piece /rmanbak/incr_bak/orcl/arclog_1_19_1_1066926876_ORCL channel ORA_DISK_1: piece handle=/rmanbak/incr_bak/orcl/arclog_1_19_1_1066926876_ORCL tag=TAG20210311T163436 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 archived log file name=/oracle/app/fast_recovery_area/ORCL/archivelog/2021_03_11/o1_mf_1_299_j4mpshyt_.arc thread=1 sequence=299 channel default: deleting archived log(s) archived log file name=/oracle/app/fast_recovery_area/ORCL/archivelog/2021_03_11/o1_mf_1_299_j4mpshyt_.arc RECID=9 STAMP=1066928175 archived log file name=/oracle/app/fast_recovery_area/ORCL/archivelog/2021_03_11/o1_mf_1_300_j4mpshz2_.arc thread=1 sequence=300 channel default: deleting archived log(s) archived log file name=/oracle/app/fast_recovery_area/ORCL/archivelog/2021_03_11/o1_mf_1_300_j4mpshz2_.arc RECID=10 STAMP=1066928175 unable to find archived log archived log thread=1 sequence=301 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of recover command at 03/11/2021 16:56:17 RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 301 and starting SCN of 6325298 # 再次執行recover恢復增量備份集: RMAN> run { set until sequence 301 thread 1; recover database; } $ sqlplus "/as sysdba" SQL> shutdown immediate SQL> startup mount; SQL> alter database open resetlogs; # 進行簡單查詢,確認業務數據狀態; 數據庫增量恢復完成! Oracle 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。