RMAN一次RMAN將資料庫不完全恢復

yingyifeng306發表於2015-04-02
由於oracle11資料庫部分資料誤刪除,需要將資料庫不完全恢復至2011年7月4日。
硬體要求:
1、 與oracle11同平臺的主機環境,即AIX 6L。
2、 大於30G的儲存空間。
考慮到oracle11佔用的儲存空間不大,為方便起見,將資料庫恢復至同主機的不同目錄下,即檔案系統/bak/zhoul/oradata中。
一、 恢復前檢查
檢查資料庫備份是否完成,可以看到在2011年7月2日資料庫進行了0級的增量備份,7月3日至7月4日資料庫進行了1級的增量備份,備份集統一存放在/bak/rman/oracle11中。
簡要說明增量備份,oracle的增量備份分為差異增量備份differential和累積增量備份cumulative,預設情況下我們都採用前者,而對於增量備份的各個等級的區別,生產環境中,我們視情況一般就定義0級和1級增量備份。所謂0級增量備份,也就是對資料庫進行完整備份,是一個資料庫的完整備份。0級又是所有增量備份的開始。也是各級增量備份的基礎。1級備份則是從上一次0級或者1級備份之後的所有變化的資料進行備份
 
以下為備份集結果輸出,為方便閱讀,以下輸出結果有所省略,根據輸出結果,我們可以清楚的知道,資料庫在2011年7月2日進行了一次0級備份,7月3日至7月7日每天進行一次1級備份。
 
oracle@/tmp$ rman target /
RMAN> list backup of database;
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
830     Incr 0  11.11G     DISK        00:05:02     02-7鏈?-11     
        BP Key: 830   Status: AVAILABLE  Compressed: NO  Tag: TAG20110702T000021
        Piece Name: /bak/rman/oracle11/bkup_rgmgcqkm_1_1
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
833     Incr 1  175.70M    DISK        00:03:28     03-7鏈?-11     
        BP Key: 833   Status: AVAILABLE  Compressed: NO  Tag: TAG20110703T003018
        Piece Name: /bak/rman/oracle11/bkup_rkmgfgot_1_1
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
836     Incr 1  170.66M    DISK        00:03:26     04-7鏈?-11     
        BP Key: 836   Status: AVAILABLE  Compressed: NO  Tag: TAG20110704T003013
        Piece Name: /bak/rman/oracle11/bkup_romgi54n_1_1
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
839     Incr 1  168.15M    DISK        00:03:18     05-7鏈?-11     
        BP Key: 839   Status: AVAILABLE  Compressed: NO  Tag: TAG20110705T003013
        Piece Name: /bak/rman/oracle11/bkup_rsmgkpgn_1_1
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
842     Incr 1  190.43M    DISK        00:03:22     06-7鏈?-11     
        BP Key: 842   Status: AVAILABLE  Compressed: NO  Tag: TAG20110706T003012
        Piece Name: /bak/rman/oracle11/bkup_s0mgndsm_1_1
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
845     Incr 1  168.15M    DISK        00:03:26     07-7鏈?-11     
        BP Key: 845   Status: AVAILABLE  Compressed: NO  Tag: TAG20110707T003012
        Piece Name: /bak/rman/oracle11/bkup_s4mgq28m_1_1
 


控制檔案在資料庫的恢復過程中佔著極為重要的地位,控制檔案是資料庫中非常重要的一個檔案,由於一般情況下資料庫的系統改變和資料庫的備份資訊一般都是存放於控制檔案中的,缺少控制檔案就意味著資料庫無法開啟,因此在進行資料恢復時通常是必不可少的。檢查控制檔案是否正常備份完成,可以看到控制檔案最近一次備份時間為2011年5月20日,由於控制檔案沒有及時備份,所以給後期的恢復帶來一定的難度,即資料庫進行不完全恢復後,為確保資料庫能夠開啟,需要進行重建控制檔案。
 
oracle@/tmp$ rman target /
RMAN> list backup of controlfile;
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
701     Full    11.17M     DISK        00:00:01     20-5鏈?-11     
        BP Key: 701   Status: AVAILABLE  Compressed: NO  Tag: TAG20110520T025529
        Piece Name: /opt/oracle/flash_recovery_area/ORACLE11/autobackup/2011_05_20/o1_mf_s_751604129_6xd7ml37_.bkp
  Control File Included: Ckp SCN: 50782285     Ckp time: 20-5鏈?-11
 
進一步檢查控制檔案為什麼備份不成功的原因,檢視備份日誌,進一步檢查發現,由於控制檔案備份至預設目錄,而預設目錄有2G限制是控制檔案備份失效的根本原因。
 
Starting Control File and SPFILE Autobackup at 02-JUL-11
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of Control File and SPFILE Autobackup command on ORA_DISK_1 channel at 07/02/2011 00:05:33
ORA-19809: ???????????
ORA-19804: ???? 52428800 ?????? (? 2147483648 ???)  
儘管控制檔案在恢復過程中佔有重要地位,但從理論上來講,只要備份集存在,資料庫即可恢復。故進一步檢查作業系統中是否存在完全備份(0級備份)和不完全備份集(1級備份)。
 
oracle@/bak/rman/oracle11$ ls -rlt
total 34742144
-rw-r-----    1 oracle   oinstall  347345920 Jun 28 00:30 bkup_qvmfvmgd_1_1
-rw-r-----    1 oracle   oinstall  186720256 Jun 28 00:34 bkup_r0mfvmh0_1_1
-rw-r-----    1 oracle   oinstall     535552 Jun 28 00:35 bkup_r1mfvmpk_1_1
-rw-r-----    1 oracle   oinstall  370257408 Jun 29 00:30 bkup_r3mg2asd_1_1
-rw-r-----    1 oracle   oinstall  182525952 Jun 29 00:34 bkup_r4mg2asv_1_1
-rw-r-----    1 oracle   oinstall     400896 Jun 29 00:34 bkup_r5mg2b5j_1_1
-rw-r-----    1 oracle   oinstall  645861376 Jun 30 00:30 bkup_r7mg4v8e_1_1
-rw-r-----    1 oracle   oinstall  385867776 Jun 30 00:35 bkup_r8mg4v90_1_1
-rw-r-----    1 oracle   oinstall     401408 Jun 30 00:35 bkup_r9mg4vhu_1_1
-rw-r-----    1 oracle   oinstall  301780480 Jul 01 00:30 bkup_rbmga80c_1_1
-rw-r-----    1 oracle   oinstall  147243008 Jul 01 00:34 bkup_rcmga80m_1_1
-rw-r-----    1 oracle   oinstall     419840 Jul 01 00:35 bkup_rdmga89k_1_1
-rw-r-----    1 oracle   oinstall  351975936 Jul 02 00:00 bkup_rfmgcqk6_1_1
-rw-r-----    1 oracle   oinstall 11931287552 Jul 02 00:05 bkup_rgmgcqkm_1_1
-rw-r-----    1 oracle   oinstall    4994560 Jul 02 00:05 bkup_rhmgcqu8_1_1
-rw-r-----    1 oracle   oinstall  382163968 Jul 03 00:30 bkup_rjmgfgoh_1_1
-rw-r-----    1 oracle   oinstall  184246272 Jul 03 00:33 bkup_rkmgfgot_1_1
-rw-r-----    1 oracle   oinstall     254464 Jul 03 00:33 bkup_rlmgfgvl_1_1
-rw-r-----    1 oracle   oinstall  434937344 Jul 04 00:30 bkup_rnmgi54d_1_1
-rw-r-----    1 oracle   oinstall  178962432 Jul 04 00:33 bkup_romgi54n_1_1
-rw-r-----    1 oracle   oinstall     196096 Jul 04 00:33 bkup_rpmgi5bg_1_1
-rw-r-----    1 oracle   oinstall  378692096 Jul 05 00:30 bkup_rrmgkpgd_1_1
-rw-r-----    1 oracle   oinstall  176324608 Jul 05 00:33 bkup_rsmgkpgn_1_1
-rw-r-----    1 oracle   oinstall     244224 Jul 05 00:33 bkup_rtmgkpn5_1_1
-rw-r-----    1 oracle   oinstall  412761600 Jul 06 00:30 bkup_rvmgndsc_1_1
-rw-r-----    1 oracle   oinstall  199688192 Jul 06 00:33 bkup_s0mgndsm_1_1
-rw-r-----    1 oracle   oinstall     232960 Jul 06 00:33 bkup_s1mgne34_1_1
-rw-r-----    1 oracle   oinstall  405035008 Jul 07 00:30 bkup_s3mgq28c_1_1
-rw-r-----    1 oracle   oinstall  176324608 Jul 07 00:33 bkup_s4mgq28m_1_1
-rw-r-----    1 oracle   oinstall     240128 Jul 07 00:33 bkup_s5mgq2fe_1_1  


二、 資料庫恢復
由於是將資料恢復到同一主機的不同目錄,因此對應的引數檔案中的目錄都將發生改變,需要對資料檔案進行從新建立。為了使得同一主機能夠啟動不同例項的資料庫,建立以下引數檔案,同時對引數檔案中修改的目錄進行建立。
對應引數檔案中目錄建立:
mkdir -p /opt/oracle/admin/zhoul/adump
mkdir -p /bak/zhoul
mkdir -p /opt/oracle
 
*.audit_file_dest='/opt/oracle/admin/zhoul/adump'
*.audit_trail='db'
*.compatible='11.1.0.0.0'
*.control_files='/bak/zhoul/control01.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='oracle11'
*.diagnostic_dest='/opt/oracle'
*.memory_max_target=493942784
*.memory_target=493942784
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=300
*.pga_aggregate_target=0
*.processes=100
*.remote_login_passwordfile='EXCLUSIVE'
*.sessions=335
*.sga_target=0
*.undo_tablespace='UNDOTBS1'
*.db_unique_name='zhoul'
 

三、 進行資料庫恢復,
由於恢復至不同目錄,需要設定每個資料檔案的恢復路徑。
資料庫恢復是一個應用資料庫備份資料檔案集來恢復資料庫的過程,資料庫中沒有歸檔日誌,所以需要有對應的0級和1級增量備份來做恢復的基礎。也就是對應的完全備份集和不完全備份集。透過RMAN中得set newname for…..將備份資料檔案集更改到對應的資料檔案路徑,並將資料restore到指定的新路徑,set newname for datafile之後用switch datafileall來重新整理control file中對應的記錄,需要注意的是該命令的粒度是資料檔案級別。
由於資料庫需要不完全恢復至2011年7月4日,也就是說我們只需要7月4號前的資料就可以了,我們只要將7月4日的不完全備份簡單重新命名,使得Oracle無法識別對應的資料集。
oracle@/bak/rman/oracle11$ mv  bkup_rnmgi54d_1_1  bkup_rnmgi54d_1_1.bak
oracle@/bak/rman/oracle11$ mv  bkup_romgi54n_1_1  bkup_romgi54n_1_1.bak  

透過執行run批處理計劃進行資料的恢復應用。
透過set newname for…..將更改對應的資料檔案路徑,並將資料restore到指定的新路徑下面。set newname for datafile之後需要用switch datafileall來重新整理control file中對應的記錄

RMAN> run {
2> set newname for datafile 1 to '/bak/zhoul/oradata/system01.dbf';
3> set newname for datafile 2 to '/bak/zhoul/oradata/sysaux01.dbf';
4> set newname for datafile 3 to '/bak/zhoul/oradata/undotbs01.dbf';
5> set newname for datafile 4 to '/bak/zhoul/oradata/users01.dbf';
6> set newname for datafile 5 to '/bak/zhoul/oradata/system02';
7> set newname for datafile 6 to '/bak/zhoul/oradata/undotbs02.dbf';
8> set newname for datafile 7 to '/bak/zhoul/oradata/trng.dbf';
9> set newname for datafile 8 to '/bak/zhoul/oradata/trng_idx_01.dbf';
10> set newname for datafile 9 to '/bak/zhoul/oradata/AS_BASE_DATA.dbf';
11> set newname for datafile 10 to '/bak/zhoul/oradata/AS_BASE_INDX.dbf';
12> set newname for datafile 11 to '/bak/zhoul/oradata/FA_400_BASE_DATA.dbf';
13> set newname for datafile 12 to '/bak/zhoul/oradata/FA_400_BASE_INDX.dbf';
14> set newname for datafile 13 to '/bak/zhoul/oradata/AS_CONF_DATA01.dbf';
15> set newname for datafile 14 to '/bak/zhoul/oradata/AS_CONF_INDX01.dbf';
16> set newname for datafile 15 to '/bak/zhoul/oradata/AS_PRJ1_DATA.dbf';
17> set newname for datafile 16 to '/bak/zhoul/oradata/AS_PRJ1_INDX.dbf';
18> set newname for datafile 17 to '/bak/zhoul/oradata/AS_SAND_DATA.dbf';
19> set newname for datafile 18 to '/bak/zhoul/oradata/AS_SAND_INDX.dbf';
20> set newname for datafile 19 to '/bak/zhoul/oradata/AS_L10N_DATA01.dbf';
21> set newname for datafile 20 to '/bak/zhoul/oradata/AS_L10N_INDX01.dbf';
22> set newname for datafile 21 to '/bak/zhoul/oradata/FA_400_CONF_DATA.dbf';
23> set newname for datafile 22 to '/bak/zhoul/oradata/FA_400_CONF_INDX.dbf';
24> set newname for datafile 23 to '/bak/zhoul/oradata/FA_400_PRJ1_DATA.dbf';
25> set newname for datafile 24 to '/bak/zhoul/oradata/FA_400_PRJ1_INDX.dbf';
26> set newname for datafile 25 to '/bak/zhoul/oradata/LTK_DATAT01.dbf';
27> set newname for datafile 26 to '/bak/zhoul/oradata/FA_400_SAND_DATA.dbf';
28> set newname for datafile 27 to '/bak/zhoul/oradata/FA_400_L10N_DATA.dbf';
29> set newname for datafile 28 to '/bak/zhoul/oradata/FA_400_L10N_INDX.dbf';
30> set newname for datafile 29 to '/bak/zhoul/oradata/AS_BPR1_DATA.dbf';
31> set newname for datafile 30 to '/bak/zhoul/oradata/AS_BPR1_INDX.dbf';
32> set newname for datafile 31 to '/bak/zhoul/oradata/FA_400_BPR1_DATA.dbf';
33> set newname for datafile 32 to '/bak/zhoul/oradata/FA_400_BPR1_INDX.dbf';
34> set newname for datafile 33 to '/bak/zhoul/oradata/FA_400_SAND_INDX.dbf';
35> set newname for datafile 34 to '/bak/zhoul/oradata/AS_TRNG_DATA01.dbf';
36> set newname for datafile 35 to '/bak/zhoul/oradata/FA_400_TRNG_DATA01.dbf';
37> set newname for datafile 36 to '/bak/zhoul/oradata/AS_TRNG_INDX01';
38> set newname for datafile 37 to '/bak/zhoul/oradata/FA_400_TRNG_INDX01';
39> set newname for datafile 38 to '/bak/zhoul/oradata/AS_TRAN_DATA01.dbf';
40> set newname for datafile 39 to '/bak/zhoul/oradata/AS_TRAN_INDX01.dbf';
41> set newname for datafile 40 to '/bak/zhoul/oradata/FA_400_TRAN_DATA01.dbf';
42> set newname for datafile 41 to '/bak/zhoul/oradata/FA_400_TRAN_INDX01.dbf';
43> set newname for datafile 42 to '/bak/zhoul/oradata/qnpc';
44> set newname for datafile 43 to '/bak/zhoul/oradata/AS_TEST_DATA.dbf';
45> set newname for datafile 44 to '/bak/zhoul/oradata/AS_TEST_INDX.dbf';
46> set newname for datafile 45 to '/bak/zhoul/oradata/FA_400_TEST_DATA.dbf';
47> set newname for datafile 46 to '/bak/zhoul/oradata/FA_400_TEST_INDX.dbf';
48> restore database;
49> switch datafile all;
50> recover database noredo;
51> }  
四、 重建控制檔案,需要注意的是重建控制檔案時,由於Oracle存在bug,需要將oracle11G生產資料庫例項關閉,才能重建成功。
控制檔案的重建,控制檔案重建最簡單的方法就是透過備份控制檔案進行,但是由於資料庫對於控制檔案沒有及時備份,所以沒有最新的備份控制檔案,因此我們可以透過獲得重建控制檔案的指令碼,透過指令碼來進行控制檔案的重建。
SQL> alter database backup controlfile to trace;
在udump下我們可以尋找到最新的trace檔案,在此檔案中就包含了最新生成的當前控制檔案的一些引數及生成語法,我們可以透過對該檔案進行修改從而獲得對應的重建控制檔案的指令碼。
 
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORACLE11" RESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 5 (
    '/bak/zhoul/oradata/redo05_1.log',
    '/bak/zhoul/oradata/redo05_2.log'
  ) SIZE 100M,
  GROUP 6 (
    '/bak/zhoul/oradata/redo06_1.log',
    '/bak/zhoul/oradata/redo06_2.log'
  ) SIZE 100M,
  GROUP 7 (
    '/bak/zhoul/oradata/redo07_1.log',
    '/bak/zhoul/oradata/redo07_2.log'
  ) SIZE 100M,
  GROUP 8 (
    '/bak/zhoul/oradata/redo08_1.log',
    '/bak/zhoul/oradata/redo08_2.log'
  ) SIZE 100M,
  GROUP 9 (
    '/bak/zhoul/oradata/redo09_1.log',
    '/bak/zhoul/oradata/redo09_2.log'
  ) SIZE 100M,
  GROUP 10 (
    '/bak/zhoul/oradata/redo10_1.log',
    '/bak/zhoul/oradata/redo10_2.log'
  ) SIZE 100M
-- STANDBY LOGFILE
DATAFILE
  '/bak/zhoul/oradata/system01.dbf',
  '/bak/zhoul/oradata/sysaux01.dbf',
  '/bak/zhoul/oradata/undotbs01.dbf',
  '/bak/zhoul/oradata/users01.dbf',
  '/bak/zhoul/oradata/system02',
  '/bak/zhoul/oradata/undotbs02.dbf',
  '/bak/zhoul/oradata/trng.dbf',
  '/bak/zhoul/oradata/trng_idx_01.dbf',
  '/bak/zhoul/oradata/AS_BASE_DATA.dbf',
  '/bak/zhoul/oradata/AS_BASE_INDX.dbf',
  '/bak/zhoul/oradata/FA_400_BASE_DATA.dbf',
  '/bak/zhoul/oradata/FA_400_BASE_INDX.dbf',
  '/bak/zhoul/oradata/AS_CONF_DATA01.dbf',
  '/bak/zhoul/oradata/AS_CONF_INDX01.dbf',
  '/bak/zhoul/oradata/AS_PRJ1_DATA.dbf',
  '/bak/zhoul/oradata/AS_PRJ1_INDX.dbf',
  '/bak/zhoul/oradata/AS_SAND_DATA.dbf',
  '/bak/zhoul/oradata/AS_SAND_INDX.dbf',
  '/bak/zhoul/oradata/AS_L10N_DATA01.dbf',
  '/bak/zhoul/oradata/AS_L10N_INDX01.dbf',
  '/bak/zhoul/oradata/FA_400_CONF_DATA.dbf',
  '/bak/zhoul/oradata/FA_400_CONF_INDX.dbf',
  '/bak/zhoul/oradata/FA_400_PRJ1_DATA.dbf',
  '/bak/zhoul/oradata/FA_400_PRJ1_INDX.dbf',
  '/bak/zhoul/oradata/LTK_DATAT01.dbf',
  '/bak/zhoul/oradata/FA_400_SAND_DATA.dbf',
  '/bak/zhoul/oradata/FA_400_L10N_DATA.dbf',
  '/bak/zhoul/oradata/FA_400_L10N_INDX.dbf',
  '/bak/zhoul/oradata/AS_BPR1_DATA.dbf',
  '/bak/zhoul/oradata/AS_BPR1_INDX.dbf',
  '/bak/zhoul/oradata/FA_400_BPR1_DATA.dbf',
  '/bak/zhoul/oradata/FA_400_BPR1_INDX.dbf',
  '/bak/zhoul/oradata/FA_400_SAND_INDX.dbf',
  '/bak/zhoul/oradata/AS_TRNG_DATA01.dbf',
  '/bak/zhoul/oradata/FA_400_TRNG_DATA01.dbf',
  '/bak/zhoul/oradata/AS_TRNG_INDX01',
  '/bak/zhoul/oradata/FA_400_TRNG_INDX01',
  '/bak/zhoul/oradata/AS_TRAN_DATA01.dbf',
  '/bak/zhoul/oradata/AS_TRAN_INDX01.dbf',
  '/bak/zhoul/oradata/FA_400_TRAN_DATA01.dbf',
  '/bak/zhoul/oradata/FA_400_TRAN_INDX01.dbf',
  '/bak/zhoul/oradata/qnpc',
  '/bak/zhoul/oradata/AS_TEST_DATA.dbf',
  '/bak/zhoul/oradata/AS_TEST_INDX.dbf',
  '/bak/zhoul/oradata/FA_400_TEST_DATA.dbf',
  '/bak/zhoul/oradata/FA_400_TEST_INDX.dbf'
CHARACTER SET ZHS16CGB231280;  


五、 將資料庫開啟
重建控制檔案之後,只需要將資料庫簡單開啟即可,資料庫就恢復到了2011年7月4日。
 
SQL>alter database open resetlogs;  
 ------------------------------------------------------------------------------------

原部落格地址:http://blog.itpub.net/23732248/
原作者:應以峰 (frank-ying)
-------------------------------------------------------------------------------------

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23732248/viewspace-1482795/,如需轉載,請註明出處,否則將追究法律責任。

相關文章