RMAN一次RMAN將資料庫不完全恢復
由於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;
硬體要求:
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)
-------------------------------------------------------------------------------------
原部落格地址:http://blog.itpub.net/23732248/
原作者:應以峰 (frank-ying)
-------------------------------------------------------------------------------------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23732248/viewspace-1482795/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Rman 資料庫的不完全恢復Oracle資料庫
- 【RMAN】使用RMAN備份將資料庫不完全恢復到指定時間點資料庫
- [RMAN]使用RMAN備份將資料庫不完全恢復到指定時間點資料庫
- RMAN恢復資料庫資料庫
- RMAN全庫【完全恢復/不完全恢復brief version】
- 【RMAN】rman使用NORESTELOGS 方式恢復資料庫REST資料庫
- oracle之rman恢復資料庫Oracle資料庫
- LianTong rman資料庫恢復資料庫
- rman 全庫恢復asm資料庫ASM資料庫
- 利用RMAN恢復整個資料庫資料庫
- rman 恢復資料塊
- rman恢復資料塊
- rman備份恢復-rman恢復資料檔案測試
- 一次用RMAN做資料庫恢復遇到的問題資料庫
- Oracle 基於 RMAN 的不完全恢復(incomplete recovery by RMAN)Oracle
- rman資料庫全庫備份與恢復資料庫
- 使用RMAN還原和恢復資料庫資料庫
- 利用rman恢復來複制資料庫資料庫
- RMAN恢復目錄資料庫的搭建資料庫
- oracle RMAN 非歸檔資料庫恢復Oracle資料庫
- 【備份恢復】RMAN catalog 恢復目錄資料庫資料庫
- RMAN 資料庫修復(restore)與資料庫恢復(recover)介紹資料庫REST
- linux下oracle rman 複製資料庫技術(until cancel不完全恢復)LinuxOracle資料庫
- RMAN備份恢復典型案例——資料庫卡頓資料庫
- 非RMAN熱備份資料庫和恢復資料庫
- Oracle資料庫備份與恢復之RMANOracle資料庫
- Oracle資料庫RMAN小結之恢復部分Oracle資料庫
- 使用RMAN恢復完全損壞的資料庫資料庫
- 用RMAN還原並恢復資料庫——RMAN使用者手冊資料庫
- rman中三個不完全恢復場景
- RMAN學習小結1:不完全恢復
- RMAN blockrecover命令恢復資料塊BloC
- rman(4)--資料恢復顧問資料恢復
- rman 穿越incarnation恢復資料
- 資料庫不完全恢復。資料庫
- 資料庫不完全恢復資料庫
- rman不使用恢復目錄恢復資料庫示例及問題資料庫
- postgresql 使用pg_rman恢復還原資料庫SQL資料庫