RMAN 系列(五) ---- RMAN 還原 與 恢復
一. RMAN 還原與恢復基礎
在RMAN 用於中,還原與恢復是兩個不同的概念。
還原(restore):指訪問先前生成的備份,從中得到一個或多個物件,然後在磁碟上的某個位置還原這些物件。
恢復(recover):是一個數據庫與給定時間點相一致以保證能夠開啟這個資料庫的實際程序,該程序通常是通過應用重做(包括聯機重做日誌和歸檔的重做日誌)來完成的。
資料庫中的資料狀態對資料庫是非常重要的,在資料庫啟動時要求資料與給定的時間狀態一致。 如果資料庫是一致的,就可以開啟這個資料庫,如果不一致,就不能開啟。 通過使用回滾段,就可以在啟動和執行資料庫時保持這種一致性。 正常關閉資料庫時,資料檔案會再一次一致。
Oracle 嚴格要求資料的一致性。 當我們在恢復資料檔案後重新啟動資料庫時,Oracle 會檢測這些資料檔案是否狀態不一致。 Oracle 會跟蹤每個資料庫資料檔案頭中的當前SCN和控制檔案中的當前SCN。 開啟資料庫時,Oracle 要經歷3個階段: 未載入,載入和開啟。 資料庫啟動進入開啟階段時,Oracle 會開始嘗試開啟這個資料庫。 在嘗試開啟資料庫的時候,Oracle 檢測控制檔案中的SCN以及每個資料檔案中的SCN,如果這些SCN 不匹配,Oracle 就會知道資料庫存在某些錯誤並且處於不一致的狀態。
如果發現數據庫是不一致的。 Oracle 就需要判斷是否能夠基於聯機重做日誌來恢復這個資料庫,或者是否需要歸檔的重做日誌來完成恢復操作。 如果
二. RMAN 還原與恢復前的操作
啟動資料庫恢復時,我們必須先恢復伺服器引數檔案,然後恢復控制檔案。
補充知識: 先對控制檔案和spfile的備份的知識做下回顧:
當我們修改為自動備份後,在每次備份之後都會自動備份控制檔案和初始化pfile.
RMAN> show all;
CONFIGURE CONTROLFILE AUTOBACKUP ON; -- 該引數預設是關閉的
RMAN> backup database;
......
啟動Control File and SPFILE Autobackup 於 25-6月 -10
段 handle=D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/ORCL/AUTOBACKUP/2010_06_25/O1
_MF_S_722604317_6288DYQF_.BKP comment=NONE
完成 Control File and SPFILE Autobackup 於 25-6月 -10
配置控制檔案和引數檔案的自動備份時的一些規則:
(1) 在RUN 程式塊之外執行每個RMAN的backup 或者 copy 命令時,都會自動備份控制檔案和引數檔案。
(2) 使用使用了RUN 程式塊,而且該程式塊的最後一個命令不是backup 或者copy,在RUN 程式塊結尾處會備份控制檔案和引數檔案。
除了上面2種自動控制檔案備份型別,我們還可以配置另一種特殊的控制檔案備份型別。該型別發生在資料庫變化時,這些變化包括新增新的表空間,新增資料檔案,新增聯機重做日誌等。 這些自動備份型別只在磁碟上發生,使用configure controlfile autobackup命令的特殊選項可以簡化備份。如:
Configure controlfile autobackup format for device type disk to 'd:/backup/sid_%F';
使用了該選項,RDBMS 會在資料結構的變化控制檔案產生影響時自動備份控制檔案。強調一點,只支援磁碟。
手動的備份控制檔案
Alter database backup controlfile to 'd:/backup/orcl_backup.ctl';
手工備份spfile:
RMAN> backup spfile ;
啟動 Control File and SPFILE Autobackup 於 26-6月 -10
段 handle=D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/ORCL/AUTOBACKUP/2010_06_26/O1
_MF_S_722706435_62CD44SN_.BKP comment=NONE
完成 Control File and SPFILE Autobackup 於 26-6月 -10
2.1 還原伺服器引數檔案
2.1.1 使用RMAN(不使用FRA)從自動備份中恢復伺服器引數檔案
ORACLE 會預設地在$ORACLE_HOME/dbs 或者 $ORACLE_HOME/DATABASE 目錄中建立伺服器引數檔案與控制檔案。
還原伺服器引數檔案的一般過程是先設定ORACLE_SID 和 登陸 RMAN, 然後設定DBID, 使RMAN知道需要查詢哪一個資料庫的伺服器引數檔案,還必須在這個操作的同時啟動資料庫例項。
啟動資料庫例項後,如果使用預設的位置來儲存控制檔案的自動備份,就可以簡單的執行:Restore spfile from autobackup, 這樣RMAN 就可以查詢包含最新伺服器引數備份的控制檔案備份集。 一旦恢復了伺服器引數檔案,就必須關閉重啟資料庫例項。如果使用的是非預設位置,就需要分配一個指向該位置的通道,然後在使用相同的方法來還原伺服器引數檔案。
執行 restore spfile from autobackup 命令時,Oracle 會在預設位置中(或者在使用allocate channel 命令定義的為位置中)查詢自動的控制檔案備份集。 RMAN 建立控制檔案自動備份片時,會使用預設的命名約定: C-DBID-DATE-序列號。 如:C-1247395743-2010627-00。 注意的是, 這種命名規則不適用於FRA。
需要注意的是,如果沒有使用恢復目錄(並且沒有使用控制檔案,這是可能的),Oracle 就不知道最新控制檔案備份片的名稱,因此Oracle 會基於這些備份集的預設命名標準來構造控制檔案備份片的名稱。 Oracle 會遍歷整個目錄,向後查詢資料庫的控制檔案備份集。 在預設情況下,Oracle 會查詢一個在過去10天內建立的控制檔案備份集。 如果Oracle 美歐查詢到指定時間週期內建立的控制檔案備份集,就會產生一個錯誤。 如果Oracle 發現一個有效的控制檔案備份集,就會為使用者還原伺服器引數檔案。
使用restore 命令的maxseq 和 maxdays 引數可以修改RMAN 向後查詢控制檔案自動備份的時間週期。
使用預設設定的示例:
set oracle_sid=orcl
rman target sys/pwd
set dbid=1247395743
startup nomount;
restore spfile from autobackup;
shutdown immediate;
不使用預設設定的示例:
set oracle_sid=orcl
rman target sys/pwd
set dbid=1247395743
startup nomount;
run
{
set controlfile autobackup format for device type disk to 'f:/backup/%f';
allocate channel c1 device type disk;
restore spfile from autobackup;
}
shutdown immediate;
使用maxseq 和 maxdays 引數在超過預設天數(10天)的時間週期內向後查詢控制檔案備份集:
set oracle_sid=orcl
rman target sys/pwd
set dbid=1247395743
startup nomount;
run
{
set controlfile autobackup format for device type disk to 'f:/backup/%f';
allocate channel c1 device type disk;
restore spfile from autobackup maxseq 200 maxdays 1000;
}
shutdown immediate;
將引數檔案還原到不同的位置和檔案中的示例(假定資料庫正在啟動和執行):
set oracle_sid=orcl
rman target sys/pwd
set dbid=1247395743
startup nomount;
restore spfile to 'f:/backup/spfile.restore' from autobackup;
shutdown immediate;
2.1.2 使用RMAN 和 FRA 從自動備份中恢復伺服器引數檔案
使用FRA 恢復引數檔案比不使用FRA 簡單。 首先,我們不需要擔心DBID 沒有意義,也不用操心分配通道的工作,這就節省了一定的時間。 恢復伺服器引數檔案時,我們只需要正確配置臨時引數檔案(確保適當的設定FRA目標目錄),啟動ORACLE 例項,並且執行restore spfile 命令。
set oracle_sid=orcl
rman target sys/pwd
startup nomount;
restore spfile from autobackup;
shutdown immediate;
2.1.3 從特定的備份集中恢復伺服器引數檔案
在Oracle 10g中, restore 命令包含了一個from backup子句, 使用該子句可以指示包含伺服器引數檔案的備份的備份集片。 因此,只需要知道該備份集片的名稱和它的位置,就可以還原伺服器引數檔案。 在某些情況下,查詢包含伺服器引數檔案備份的備份集片可能存在一些困難,但一旦找到了該備份集片,還原工作就會非常簡單,當然,最好還原最新的控制檔案備份。
為了還原伺服器引數檔案,首先要啟動資料庫例項並標識包含伺服器引數檔案備份的備份集片(或者進行猜測)。 接著啟動RMAN,然後設定資料庫餓DBID。 一旦設定了DBID,就需要分配通道給要還原的裝置。 分配通道後,執行restore spfile 命令,在命令的末尾傳入備份集片的名稱。 於是RMAN 將伺服器引數還原到正確的位置。
set oracle_sid=orcl
rman target sys/pwd
set dbid=1247395743
startup nomount;
run
{
allocate channel c1 device type disk;
restore spfile from 'f:/backup/c-1247395743-2010627-00';
}
shutdown immediate;
2.1.4 使用恢復目錄恢復伺服器引數檔案
如果使用了恢復目錄,在啟動(未載入)ORACLE 例項後簡單執行restore spfile 命令就可以還原最新的伺服器引數檔案。 RMAN 會使用恢復目錄找出最新的控制檔案備份,並析取這個備份以供使用者使用。
set oracle_sid=orcl
rman target sys/pwd catalog user/[email protected]
startup nomount;
restore spfile from autobackup;
shutdown immediate;
2.1.5 使用聯機操作的資料庫還原備份的伺服器引數檔案
不管是否使用控制檔案或恢復目錄,在資料庫啟動時從資料庫備份中析取伺服器引數檔案的副本是非常容易的。 我們應當注意到這個操作會生成一個文字引數檔案,而不是生成一個伺服器引數檔案。 因此如果要將這個文字引數檔案用作伺服器引數檔案,就必須轉換該檔案。
如果不是使用恢復目錄並且控制檔案的自動備份已經啟動,只需要執行下面的命令:
RMAN>RESTORE SPFILE TO PFILE 'D:/BAKCUP/ORCL.ORA' FROM AUTOBACKUP;
對於任何自動備份的還原操作來說,如果不提供maxseq 和maxdays 引數值,RMAN 只需要查詢過去7天內生成的控制檔案的自動備份片。
如果沒有使用恢復目錄與控制檔案自動備份,或者是在使用恢復目錄,就可以執行:
RMAN>RESTORE SPFILE TO PFILE 'D:/BACKUP/ORCL.ORA';
這種情況下,Oracle 會使用資料庫控制檔案找到最新的備份集,並從這個備份集中還原伺服器引數檔案。
2.2 還原控制檔案
2.2.1 使用RMAN(不使用FRA)從自動備份中恢復控制檔案
ORACLE 會預設地在$ORACLE_HOME/dbs 或者 $ORACLE_HOME/DATABASE 目錄中建立伺服器引數檔案與控制檔案。
假設已經還原了例項引數檔案和啟動了例項,還原控制檔案時,一般過程是先設定ORACLE_SID 和 登陸 RMAN, 然後設定DBID, 使RMAN知道需要查詢哪一個資料庫的控制檔案。
如果使用預設的位置來儲存控制檔案的自動備份,就可以簡單的執行:Restore controlfile from autobackup, 這樣RMAN 就可以查詢包含最新控制檔案的控制檔案備份集。 一旦恢復了控制檔案,就必須關閉重啟資料庫例項。如果使用的是非預設位置,就需要分配一個指向該位置的通道,然後在使用相同的方法來還原控制檔案。
執行 restore controlfile from autobackup 命令時,Oracle 會在預設位置中(或者在使用allocate channel 命令定義的為位置中)查詢自動的控制檔案備份集。 通過DBID, RMAN 使用這個DBID在包含控制檔案備份的目錄中查詢資料庫的最新控制檔案備份集。 通過應用restore 命令的maxseq 和 maxdays 引數,可以修改RMAN查詢控制檔案自動備份的時間週期。
使用預設設定的示例:
set oracle_sid=orcl
rman target sys/pwd
set dbid=1247395743
startup nomount;
restore controlfile from autobackup;
shutdown immediate;
不使用預設設定的示例:
set oracle_sid=orcl
rman target sys/pwd
set dbid=1247395743
startup nomount;
run
{
set controlfile autobackup format for device type disk to 'f:/backup/%f';
allocate channel c1 device type disk;
restore spfile from autobackup;
}
shutdown immediate;
使用maxseq 和 maxdays 引數在超過預設天數(10天)的時間週期內向後查詢控制檔案備份集:
set oracle_sid=orcl
rman target sys/pwd
set dbid=1247395743
startup nomount;
run
{
set controlfile autobackup format for device type disk to 'f:/backup/%f';
allocate channel c1 device type disk;
restore controlfile from autobackup maxseq 200 maxdays 1000;
}
shutdown immediate;
將引數檔案還原到不同的位置和檔案中的示例(假定資料庫正在啟動和執行):
set oracle_sid=orcl
rman target sys/pwd
set dbid=1247395743
startup nomount;
restore controlfile to 'f:/backup/ctl.restore' from autobackup;
shutdown immediate;
2.2.2 使用RMAN 和 FRA 從自動備份中恢復控制檔案
使用FRA恢復控制檔案過程非常簡單,首先確保FRA位置引數被正確設定。 然後啟動例項,執行: restore controlfile from autobackup;
set oracle_sid=orcl
rman target sys/pwd
startup nomount;
restore controlfile from autobackup;
shutdown immediate;
也可以使用maxseq 和 maxdays 引數進行設定:
Restore controlfile from autobackup maxseq 200 maxdays 100;
2.2.3 恢復較早的控制檔案備份
有時候,可能需要恢復一段時間以前建立的控制檔案備份,因而控制檔案不是來自於最新的備份(執行resetlogs 通常是這樣)。 結合until time 引數,restore controlfile from autobackup 命令可以實現這一操作。 如:
Restore controlfile from autobackup until time "to_date('2010-6-27 13:25:00','yyyy-mm-dd hh24:mi:ss')";
如果要使用這個命令,就需要知道哪些控制檔案備份可以用於操作。 可以使用list backup of controlfile 命令確定哪些備份控制檔案可以用於還原操作。
RMAN> list backup of controlfile;
備份集列表
===================
BS 關鍵字 型別 LV 大小 裝置型別 經過時間 完成時間
------- ---- -- ---------- ----------- ------------ ----------
113 Full 16.00M SBT_TAPE 00:00:05 18-6月 -10
BP 關鍵字: 116 狀態: AVAILABLE 已壓縮: NO 標記: TAG20100618T085926
控制代碼: 07lghd6e_1_1 介質: /,07lghd6e_1_1
包括的控制檔案: Ckp SCN: 1403939 Ckp 時間: 18-6月 -10
BS 關鍵字 型別 LV 大小 裝置型別 經過時間 完成時間
------- ---- -- ---------- ----------- ------------ ----------
558 Full 9.52M DISK 00:00:02 26-6月 -10
BP 關鍵字: 560 狀態: AVAILABLE 已壓縮: NO 標記: TAG20100626T154715
段名:D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/ORCL/AUTOBACKUP/2010_06_26/O1_MF_S
_722706435_62CD44SN_.BKP
包括的控制檔案: Ckp SCN: 7992586 Ckp 時間: 26-6月 -10
RMAN>
2.2.4 從備份集中恢復控制檔案
在Oracle 10g中,restore 有from backup 子句,使用該子句可以指示包含控制檔案備份的備份集。因此只需要知道了該備份集片的名稱和它的位置,就可以還原控制檔案。
為了還原控制檔案,首先設定資料庫的例項並標識包含控制檔案備份的備份集(或者進行猜測)。 接著啟動RMAN,然後設定資料庫的DBID。 設定完後就需要分配通道給要還原的裝置,分配通道後,執行restore controlfile from 命令,就可還原控制檔案並複製到不同的control_file 引數位置。
set oracle_sid=orcl
rman target sys/pwd
set dbid=1247395743
startup nomount;
run
{
allocate channel c1 device type disk;
restore controlfile from 'F:/BACKUP/ORCL_0OLGTB96_1_1.BAK';
}
shutdown immediate;
2.2.5 使用恢復目錄恢復控制檔案
使用恢復目錄,可以簡單的執行restore controlfile 命令,還原最新的控制檔案,RMAN會使用恢復目錄找出最新的控制檔案備份,並析取這個備份以供使用者使用。
Set oracle_sid=orcl
Rman target sys/pwd catalog user/[email protected];
Startup nomount;
Restore controlfile;
Alter database mount;
2.2.6 還原控制檔案後的資料庫恢復
當使用RMAN 還原控制檔案(並且沒有丟失資料檔案和聯機重做日誌),有兩件事要考慮:首先,要考慮在還原控制檔案後如何啟動和執行資料庫,其實,要恢復與RMAN相關的資訊,如使用RMAN 在新建立的控制檔案中註冊歸檔的重做日誌和備份集。
2.2.6.1 在恢復控制檔案後開啟資料庫