13.服務(wù)器管理恢復(fù)--RMAN備份(練習(xí)20)
在手工備份恢復(fù)的操作中,介紹了如何使用操作系統(tǒng)命令拷貝整個(gè)文件,拷貝的文件包括數(shù)據(jù)文件、控制文件和歸檔日志文件,然年后使用這些文件還原并恢復(fù)PRACTICE數(shù)據(jù)庫(kù)。在操作過程中,用戶必須自己管理備份和恢復(fù)操作,必須創(chuàng)建需要拷貝和還原的數(shù)據(jù)庫(kù)文件清單。在本練習(xí)中,我們介紹RMAN如何使用服務(wù)器相關(guān)組件題用戶處理備份的細(xì)節(jié),當(dāng)使用RMAN進(jìn)行數(shù)據(jù)庫(kù)備份時(shí),RMAN知道需要對(duì)哪些文件進(jìn)行操作。
用戶管理與服務(wù)器管理的備份與恢復(fù)之間的根本不同之處就是:對(duì)于用于管理操作DBA必須知道需要備份什么以及需要還原與恢復(fù)什么;而對(duì)于服務(wù)器管理的操作,RMAN將通過一個(gè)簡(jiǎn)單的接口決定需要備份什么以及需要還原與恢復(fù)什么,大部分管理任務(wù)被省略或簡(jiǎn)單化了。例如:在前面描述的打開數(shù)據(jù)庫(kù)備份,如果是用戶管理備份,則在拷貝數(shù)據(jù)庫(kù)數(shù)據(jù)文件之前,必須為每一個(gè)表空間創(chuàng)建清單并將表空間置于備份模式,并產(chǎn)生額外的重做;而RMAN備份打開數(shù)據(jù)庫(kù)時(shí),并不自動(dòng)產(chǎn)生額外的重做。
RMAN處理的數(shù)據(jù)文件備份與用戶管理有什么不同?RMAN智能化程度很高,對(duì)要備份的數(shù)據(jù)文件中任何更改的數(shù)據(jù)塊的SCN保持跟蹤記錄,通過數(shù)據(jù)庫(kù)的活動(dòng)可以對(duì)備份文件的更改繼續(xù)進(jìn)行。在恢復(fù)階段,RMAN將自動(dòng)應(yīng)用需要的重做并使文件處于一致的狀態(tài)。在備份期間,有可能出現(xiàn)RMAN拷貝的數(shù)據(jù)塊沒有被DBW(數(shù)據(jù)庫(kù)寫入器)進(jìn)程完全寫入到磁盤的現(xiàn)象,從而導(dǎo)致數(shù)據(jù)塊頭部與尾部不一致,這種現(xiàn)象稱之為“斷裂”或“破碎”塊,當(dāng)檢測(cè)到這樣的數(shù)據(jù)庫(kù)時(shí),RMAN將重新讀取該塊,直到完成完整的拷貝。因此,RMAN可以以最小的性能降低為代價(jià)對(duì)打開的數(shù)據(jù)庫(kù)進(jìn)行備份。
恢復(fù)管理器為數(shù)據(jù)庫(kù)的備份提供了三種不同的方法:備份、映像拷貝以及代理拷貝。盡管三種方法都能提供恢復(fù)或數(shù)據(jù)庫(kù)失效時(shí)所需要的數(shù)據(jù)庫(kù)備份結(jié)果,但每種方法都有其優(yōu)缺點(diǎn):
一、備份
RMAN備份在選擇的備份介質(zhì)上以自己的格式創(chuàng)建一個(gè)或多個(gè)物理文件,這些物理文件稱為“備份片”,備份可以由數(shù)據(jù)庫(kù)、選擇的表空間、數(shù)據(jù)文件、控制文件、歸檔重做日志或多種混合體組成。
- 數(shù)據(jù)文件和控制文件可以合并在同一備份中;
- 歸檔日志文件必須與數(shù)據(jù)文件和控制文件分開備份。
RMAN創(chuàng)建的備份文件(備份片)不能被其他任何工具讀取,因此只能用RMAN還原,為了解這些備份是如何創(chuàng)建,需要理解如下基本術(shù)語(yǔ):
- 通道:通道是從目標(biāo)數(shù)據(jù)庫(kù)到備份介質(zhì)的通信途徑,這個(gè)通道類型可以是磁盤或者是“SBT_TAPE”(SBT代表系統(tǒng)備份到磁帶),并且通道可以設(shè)置許多參數(shù)來(lái)規(guī)定備份片的大小、同時(shí)打開的文件數(shù)以及文件讀取的速度。在實(shí)際使用備份開始之前至少要分配一個(gè)通道,當(dāng)然也可以使用多個(gè)通道;
- 備份集:備份集就是當(dāng)運(yùn)行備份命令時(shí)生成的物理文件的邏輯組合,至少要為一個(gè)備份創(chuàng)建一個(gè)備份集,但通常使用多個(gè)備份集,參數(shù)filesperset參數(shù)用來(lái)控制一個(gè)備份集中備份的文件,參數(shù)setsize設(shè)置每個(gè)備份集的最大尺寸。如果分配了多個(gè)通道,RMAN將為每個(gè)通道創(chuàng)建一個(gè)備份集,并對(duì)備份集中的備份文件進(jìn)行分隔,這樣每個(gè)備份集大小相近;
- 備份片:備份片是RMAN在備份期間創(chuàng)建的物理文件,該文件將包含來(lái)自目標(biāo)數(shù)據(jù)文件、控制文件和歸檔中作日志得到的實(shí)際數(shù)據(jù)塊,每個(gè)備份集至少包含一個(gè)備份片,但也可以包含多個(gè),一個(gè)數(shù)據(jù)文件可以跨越多個(gè)備份片;
- 格式(format):格式是備份期間賦予生成備份片的文件名,當(dāng)備份到磁盤時(shí)需要提供備份片的全路徑;
- 標(biāo)記(tag):標(biāo)記是用于標(biāo)記一個(gè)備份的一個(gè)有意義的名稱。例如,Sunday Level 0備份或許意味著Sun-Lev0,RMAN可以直接使用這個(gè)標(biāo)記從一個(gè)指定的備份中重建文件,標(biāo)記文件最大長(zhǎng)度為30個(gè)字符,而且一個(gè)標(biāo)記可以用于多個(gè)備份;
- 備份鍵值:RMAN創(chuàng)建的每個(gè)備份都賦予了確定身份的一個(gè)唯一序列號(hào)。
當(dāng)執(zhí)行backup命令時(shí),請(qǐng)考慮如下問題:
1) 備份時(shí)數(shù)據(jù)庫(kù)處于什么狀態(tài)?(數(shù)據(jù)庫(kù)狀態(tài))
2) RMAN備份需要保存到什么地方?(設(shè)置目的地)
3) 需要備份的是數(shù)據(jù)庫(kù)的那些部分?(數(shù)據(jù)庫(kù)文件)
4) 需要拷貝數(shù)據(jù)庫(kù)文件的哪些數(shù)據(jù)塊?(增量級(jí)別)
下面將討論備份時(shí)需要考慮的這些問題:
1、確定備份集數(shù)據(jù)庫(kù)狀態(tài):
首先,RMAN可以在兩種不同的數(shù)據(jù)庫(kù)狀態(tài)之間進(jìn)行備份,這兩種狀態(tài)分別是數(shù)據(jù)庫(kù)關(guān)閉和打開時(shí)進(jìn)行備份。
- 關(guān)閉數(shù)據(jù)庫(kù)備份:類似于用戶管理的關(guān)閉數(shù)據(jù)庫(kù)的備份,目標(biāo)數(shù)據(jù)庫(kù)沒有打開,但不同于用戶管理的備份,RMAN期望數(shù)據(jù)庫(kù)處于加載狀態(tài),RMAN在關(guān)閉數(shù)據(jù)庫(kù)備份時(shí)必須訪問目標(biāo)數(shù)據(jù)庫(kù)控制文件以獲取結(jié)構(gòu)信息;
- 打開數(shù)據(jù)庫(kù)備份:類似于用戶管理的打開數(shù)據(jù)庫(kù)的備份,目標(biāo)數(shù)據(jù)庫(kù)處于打開狀態(tài),但RMAN不同之處是:在備份期間沒有將表空間置于備份模式,不會(huì)產(chǎn)生額外的重做。
2、確定備份集目的地:
接著,當(dāng)執(zhí)行RMAN備份命令時(shí),RMAN將生成一個(gè)或多個(gè)文件(備份片),這些文件除了備份的數(shù)據(jù)塊之外還存儲(chǔ)了RMAN的控制信息,為RMAN創(chuàng)建的備份片賦予有意義的名稱可以避免無(wú)人知道磁盤或磁帶上的文件來(lái)歷或內(nèi)容。下面是一些可用的格式變量:
- %d 數(shù)據(jù)庫(kù)名稱;
- %n 為數(shù)據(jù)庫(kù)名增加1個(gè)或多個(gè)x字母使長(zhǎng)度達(dá)到8個(gè)字符;
- %s 備份集編號(hào),這些編號(hào)來(lái)源于目標(biāo)控制文件,從1開始每次遞增為1,如果控制文件重新生成,則該編號(hào)回到1重新開始;
- %p 備份集內(nèi)備份片的編號(hào),第一個(gè)備份片的號(hào)碼是1,而且在同一備份集中每個(gè)新的備份片遞增量為1;
- %t 備份的時(shí)間值,該值是從以前某個(gè)參考時(shí)間開始到現(xiàn)在的秒數(shù);
- %u 一個(gè)8位字符的值,來(lái)自于備份集數(shù)字和備份的時(shí)間;
- %c 備份集中的備份片的拷貝數(shù),除非指定為雙備份外,否則該值一直是1;
- %U 生成一個(gè)唯一的由%u_%p_%c組成的文件名,如果沒有指定備份文件的格式,默認(rèn)值為%U。
下表列出一些使用這些格式變量的示例,如果備份到磁盤必須指定路徑名和文件名,如果沒有制定路徑名,備份通常情況存儲(chǔ)到$ORACLE_HOME/dbs
|
指定的格式 |
示例結(jié)果 |
|
dbinc0_%d_%s_%p_%t |
dbinc0_PROD_21_1_447001901 |
|
tbsUSERS_%U |
tbsUSERS_08ade506_1_1 |
|
al_%n_%t_%s_%p |
al_PRODXXXX_44157468_41_3 |
3、確定備份集數(shù)據(jù)庫(kù)文件:
下一步,定義屬于RMAN備份范圍的屬于,在執(zhí)行一個(gè)單獨(dú)的backup命令時(shí),需要制定包含在備份集中的數(shù)據(jù)文件,這些文件包括數(shù)據(jù)文件、控制文件和歸檔日志文件。可以應(yīng)用如下備份選項(xiàng):
- 整體數(shù)據(jù)庫(kù)備份:備份集中包含了目標(biāo)數(shù)據(jù)庫(kù)中所有的數(shù)據(jù)文件和控制文件的數(shù)據(jù)塊,在備份命令之后關(guān)鍵字DATABASE指定進(jìn)行整體數(shù)據(jù)庫(kù)備份,例如BACKUP(DATABASE);
- 表空間備份:指定表空間所有數(shù)據(jù)文件的數(shù)據(jù)塊拷貝到備份集中,在備份命令后,用關(guān)鍵字TABLESPACE指定進(jìn)行表空間備份,例如:BACKUP(TABLESPACE SYSTEM,USER);
- 數(shù)據(jù)文件備份:用備份命令后用關(guān)鍵字DATAFILE指定進(jìn)行數(shù)據(jù)文件備份,例如:BACKUP (DATAFILE 1,2,3,4);
- 控制文件備份:數(shù)據(jù)庫(kù)控制文件中的所有數(shù)據(jù)塊拷貝到備份集中,在備份命令之后用關(guān)鍵字CONTROLFILE指定進(jìn)行控制文件備份。例如:BACKUP CURRENT CONTROLFILE。黨對(duì)系統(tǒng)表空間進(jìn)行備份時(shí),控制文件自動(dòng)包含在備份中,因此一個(gè)完全的數(shù)據(jù)庫(kù)備份包含在當(dāng)前的控制文件;
- 歸檔日志文件備份:每個(gè)歸檔日志文件的所有數(shù)據(jù)塊都拷貝到備份集中,在備份命令之后用關(guān)鍵字ARCHIVELOG指定進(jìn)行歸檔日志備份,盡管可以用同樣的備份命令備份數(shù)據(jù)文件、控制文件和歸檔日志,但RMAN將為歸檔日志創(chuàng)建ige獨(dú)立的備份集,例如:BACKUP(ARCHIVELOG ALL)。
4、確定備份集的級(jí)別
數(shù)據(jù)文件由數(shù)據(jù)塊組成,每個(gè)塊都在更新時(shí)賦予一個(gè)系統(tǒng)更改號(hào),當(dāng)進(jìn)行備份時(shí),每個(gè)塊從數(shù)據(jù)文件讀出,只有符合備份級(jí)別條件的數(shù)據(jù)塊才拷貝到備份集中。因?yàn)闅w檔日志文件和控制文件中所有的數(shù)據(jù)塊都將復(fù)制,所以備份級(jí)別只屬于數(shù)據(jù)文件備份,RMAN不從數(shù)據(jù)庫(kù)文件中拷貝空的數(shù)據(jù)塊到備份集中,只有進(jìn)行映像拷貝時(shí)才拷貝空的數(shù)據(jù)塊。
二、 壓縮備份
RMAN進(jìn)行備份數(shù)據(jù)文件時(shí),有兩種模式的操作:增量式和完全式。
1、增量式備份(Ineremental Backup):
采用增量式備份策略可以只備份上次增量備份之后更改的數(shù)據(jù)塊,這樣可以大大減少備份的數(shù)據(jù)量,并因此可以減少進(jìn)行備份和還原所需要的時(shí)間和控件。
增量備份有備份級(jí)別的概念,級(jí)別是0到4之間的整數(shù),當(dāng)進(jìn)行增量備份時(shí),數(shù)據(jù)檢查點(diǎn)SCN存儲(chǔ)在目標(biāo)控制文件中,隨后的增量備份決定了需要拷貝那些SCN之后的數(shù)據(jù)塊。備份級(jí)別0是全集備份級(jí)別,在級(jí)別為0的備份中,要備份選中數(shù)據(jù)文件所有使用過的數(shù)據(jù)塊。
增量備份有兩種類型:
- 差異型:差異型備份拷貝最近進(jìn)行的同級(jí)或低級(jí)增量備份以來(lái)所有改變的數(shù)據(jù)塊。例如,在級(jí)別為1的差異型增量備份時(shí),所有最近級(jí)別為1的備份的數(shù)據(jù)將被拷貝;如果以前沒有進(jìn)行過級(jí)別為1的備份,則所有最新級(jí)別為0的備份以來(lái)的數(shù)據(jù)塊都要拷貝,當(dāng)備份命中使用incremental關(guān)鍵字時(shí),則差異備份是RMAN默認(rèn)的增量備份類型;
- 累積型:累積型備份拷貝最新地級(jí)別增量備份以來(lái)的所有更改過的數(shù)據(jù)塊。例如,在級(jí)別為2的累積增量備份中,自從上次級(jí)別為1的增量備份以來(lái)的所有數(shù)據(jù)塊都要拷貝。如果沒有進(jìn)行過級(jí)別為1的備份,則自上次級(jí)別為0的增量備份以來(lái)的所有數(shù)據(jù)塊都要拷貝。
下面給出了不同增量備份的一個(gè)基線,一個(gè)星期的每一天為數(shù)據(jù)文件生成一個(gè)備份集,實(shí)施這些備份的描述如下:
- 星期天 進(jìn)行級(jí)別為0的增量備份,數(shù)據(jù)塊#2、#3、#4、#5和#6拷貝到備份集120中,這些塊組成了選為備份的數(shù)據(jù)文件中的所有使用過的數(shù)據(jù)塊。級(jí)別為0的增量備份既不是累積型也不是差異型,這是作為增量備份策略的一個(gè)基準(zhǔn);
- 星期一 進(jìn)行級(jí)別為2的差異增量備份,自從星期天備份以來(lái),數(shù)據(jù)文件中更改的塊是#7,因此這個(gè)數(shù)據(jù)塊是唯一拷貝到備份集121中的;
- 星期二 進(jìn)行級(jí)別為2的差異增量備份,自從星期一的備份以來(lái),數(shù)據(jù)塊#2中的一行數(shù)據(jù)更新了。因?yàn)檫@個(gè)數(shù)據(jù)塊是唯一被更新的,所以只有這個(gè)數(shù)據(jù)塊被拷貝到備份集122中;
- 星期三 進(jìn)行級(jí)別為2的差異增量備份,自從星期二的備份以來(lái),數(shù)據(jù)塊#8插入了一行數(shù)據(jù)。因?yàn)檫@個(gè)數(shù)據(jù)塊是唯一更新的,所以只有這個(gè)數(shù)據(jù)塊拷貝到備份集123中;
- 星期四 進(jìn)行級(jí)別為1的差異增量備份,自從最近一次的級(jí)別為1或更低級(jí)的備份以來(lái),向備份集123拷貝所有更改過的數(shù)據(jù)塊。自從級(jí)別0的備份以來(lái),沒有進(jìn)行級(jí)別為1的備份,因此自星期天0級(jí)備份以來(lái)所有更改的數(shù)據(jù)塊都包含在這個(gè)備份集124中(#2、#3、#4);
- 星期五 因?yàn)樽詮男瞧谒牡募?jí)別1的備份以來(lái),數(shù)據(jù)增加到數(shù)據(jù)塊#9,所以級(jí)別為2的增量備份將#2拷貝到備份集125中;
- 星期六 因?yàn)樽詮男瞧谖寮?jí)別2的備份以來(lái),數(shù)據(jù)塊#2中數(shù)據(jù)更改,所有級(jí)別為2的增量備份將#2拷貝到備份集126中;
- 星期天 進(jìn)行級(jí)別為0的增量備份將所有使用過的數(shù)據(jù)塊拷貝到備份集127中,又開始新一輪的循環(huán)備份。
如果選擇了差異增量備份策略,那么在星期六級(jí)別為2的增量備份后,如果數(shù)據(jù)文件在星期六丟失,則RMAN將采取以來(lái)備份進(jìn)行還原:
- 星期天的增量級(jí)別為0 包含數(shù)據(jù)文件中所有使用過的數(shù)據(jù)塊,作為后續(xù)還原工作的基準(zhǔn),必須還原級(jí)別為0的備份;
- 星期四的增量級(jí)別為1 還原所有自星期天備份還原以來(lái)所有更改過的數(shù)據(jù)塊;
- 星期五的增量級(jí)別為2 還原所有自星期四備份以來(lái)所有更改過的數(shù)據(jù)塊;
- 星期六的增量級(jí)別為2 還原所有自星期五以來(lái)所有更改過的數(shù)據(jù);
- 最后 應(yīng)用所有自星期四備份以來(lái)生成的重做日志。
累積增量備份類似于差異備份,但略有不同。這個(gè)圖顯示了累積增量備份的基線,一個(gè)星期的每一天為一個(gè)數(shù)據(jù)文件生成一個(gè)備份集:
- 星期天 進(jìn)行級(jí)別為0的增量備份,數(shù)據(jù)塊#2、#3、#4、#5和#6拷貝到備份集120中,這些塊組成了選為備份的數(shù)據(jù)文件中的所有使用過的數(shù)據(jù)塊。級(jí)別為0的增量備份既不是增量備份也不是累積備份,這是作為增量備份策略的一個(gè)基準(zhǔn)的全備份;
- 星期一 進(jìn)行級(jí)別為2的累積增量備份,自從星期天備份以來(lái),數(shù)據(jù)文件中更改的塊是#7,因此這個(gè)數(shù)據(jù)塊是唯一拷貝到備份集121中的;
- 星期二 進(jìn)行級(jí)別為2的差異增量備份,自從星期一的備份以來(lái),數(shù)據(jù)塊#2中的一行數(shù)據(jù)更新了。自從星期天備份以來(lái)的兩個(gè)更改的數(shù)據(jù)塊都拷貝到備份集122中;
- 星期三 進(jìn)行級(jí)別為2的差異增量備份,自從星期二的備份以來(lái),數(shù)據(jù)塊#8插入了一行數(shù)據(jù)。自從星期天備份以來(lái)的三個(gè)更改數(shù)據(jù)塊都拷貝到備份集123中;
- 星期四 進(jìn)行級(jí)別為1的差異增量備份,向備份集123中拷貝所有最近一次級(jí)別為1備份以來(lái)更改過的數(shù)據(jù)塊,自星期天0級(jí)別備份以來(lái)所有更改的數(shù)據(jù)塊都包含在這個(gè)備份集中(#2、#7和#8);
- 星期五 因?yàn)樽詮男瞧谒牡募?jí)別1的備份以來(lái),數(shù)據(jù)增加到數(shù)據(jù)塊#9,所以級(jí)別為2的增量備份將#2拷貝到備份集125中;
- 星期六 因?yàn)樽詮男瞧谖寮?jí)別2的備份以來(lái),數(shù)據(jù)塊#2和數(shù)據(jù)塊#9中數(shù)據(jù)更改,所有級(jí)別為2的增量備份將#2和#9拷貝到備份集126中;
- 星期天 進(jìn)行級(jí)別為0的增量備份將所有使用過的數(shù)據(jù)塊拷貝到備份集127中,又開始新一輪的循環(huán)備份。
如果選擇了累積增量備份策略,那么在星期六級(jí)別為2的增量備份后,如果數(shù)據(jù)文件在星期六中午丟失,則RMAN將采取以來(lái)備份進(jìn)行還原:
- 星期天的增量級(jí)別為0 包含數(shù)據(jù)文件中所有使用過的數(shù)據(jù)塊,作為后續(xù)還原工作的基準(zhǔn),必須還原級(jí)別為0的備份;
- 星期四的增量級(jí)別為1 還原所有自星期天備份還原以來(lái)所有更改過的數(shù)據(jù)塊;
- 星期六的增量級(jí)別為2 還原所有自星期四以來(lái)所有更改過的數(shù)據(jù);
- 最后 應(yīng)用所有自星期四備份以來(lái)生成的重做日志。
選擇應(yīng)用差異還是累積備份策略,需要根據(jù)備份速度/大小與還原和恢復(fù)的速度比較確定:
- 差異增量備份將比累積備份少拷貝數(shù)據(jù)塊,因此在校對(duì)的時(shí)間內(nèi)生成較少的備份片;差異備份的缺點(diǎn)是,因?yàn)樾枰嗟膫浞菁赃€原時(shí)間較多;
- 因?yàn)樵谶€原數(shù)據(jù)庫(kù)文件時(shí)需要較少的備份集,所有累積增量還原速度比較快,而累積備份的缺點(diǎn)是,需要對(duì)統(tǒng)計(jì)被的備份拷貝相同的數(shù)據(jù)塊,拷貝相同的數(shù)據(jù)塊意味著生成較大的備份片文件且備份需要較長(zhǎng)的時(shí)間。
因?yàn)閭浞菁邪耸褂眠^的和更改過的數(shù)據(jù)塊,所有備份集將比映像拷貝要小,使用備份集的主要原因就是因?yàn)閭浞菸募扔绊懣截惡陀脩艄芾聿僮鞴?jié)省空間,當(dāng)使用RMAN備份命令保護(hù)數(shù)據(jù)庫(kù)時(shí),應(yīng)參考如下情況和建議:
- 可以從RMAN客戶端進(jìn)行備份,但備份集總在連接到服務(wù)器的磁帶或磁盤上生成;
- RMAN并不備份SQL*PLUS配置文件、參數(shù)文件、告警日志和口令文件;
- 必須使用與備份目標(biāo)數(shù)據(jù)庫(kù)相同版本的RMAN執(zhí)行體。
2、完全備份(Full Backup):
完全備份中,每個(gè)數(shù)據(jù)文件中所有使用過的數(shù)據(jù)塊都拷貝到數(shù)據(jù)集中,RMAN可以還原完全備份并應(yīng)用歸檔中作日志將數(shù)據(jù)庫(kù)及時(shí)回退到以前的狀態(tài)。完全備份拷貝的數(shù)據(jù)塊與增量級(jí)別為0的備份拷貝是一樣的,但卻不是增量備份,增量備份選擇拷貝的數(shù)據(jù)塊是基于以前的增量備份。例如,通過星期天增量級(jí)別為0的備份對(duì)一個(gè)數(shù)據(jù)文件進(jìn)行備份,在星期一進(jìn)行完全備份,在星期二進(jìn)行增量級(jí)別為1的備份,則在星期二備份的數(shù)據(jù)塊并沒有考慮在星期一的備份,而是在最近一次增量備份(星期天備份)以來(lái)所有更改過的數(shù)據(jù)塊。
三、 映像拷貝
拷貝命令將生成一個(gè)完整數(shù)據(jù)庫(kù)文件的映像拷貝這個(gè)數(shù)據(jù)庫(kù)文件可以是數(shù)據(jù)文件、控制文件或者是歸檔日志文件,RMAN生成的文件拷貝需需要應(yīng)用任何特殊格式化就能與原始文件區(qū)別開來(lái)。因此當(dāng)數(shù)據(jù)庫(kù)打開或關(guān)閉時(shí),該文件可以當(dāng)做操作系統(tǒng)拷貝的文件應(yīng)用,唯一不同的是,該拷貝自動(dòng)在目標(biāo)數(shù)據(jù)庫(kù)控制文件和可選的回復(fù)目錄中注冊(cè)了。
級(jí)別為0的增量備份或完全備份生成一個(gè)數(shù)據(jù)文件所有使用過的數(shù)據(jù)塊的備份,映像拷貝也完成同樣的工作,同時(shí)也包含了所有空的數(shù)據(jù)塊。在應(yīng)用任何其他增量備份或重做之前,RMAN可以應(yīng)用映像拷貝、完全備份或級(jí)別為0的備份作為還原的基準(zhǔn)。影響拷貝不能用任何其他增量級(jí)別(1-4)生成。RMAN只能在磁盤生成映像拷貝,不能使用SBT_TAPE通道生成影響拷貝。
影響拷貝與差異和累積增量備份相比有一個(gè)主要的優(yōu)點(diǎn):可以在還原過程中快速應(yīng)用影響拷貝。例如,如果丟失了數(shù)據(jù)文件,讓RMAN切換到映像拷貝、應(yīng)用重做,則該數(shù)據(jù)文件可以訪問。但應(yīng)用映像拷貝最大的缺點(diǎn)是,需要占用與原始空間一樣的的磁盤空間。
四、代理拷貝
Oracle增加了一個(gè)稱為代理拷貝的功能,以增強(qiáng)發(fā)布的介質(zhì)管理層(MML)API,代理拷貝允許MML控制如何進(jìn)行數(shù)據(jù)文件的讀取和備份,RMAN向MML層傳遞需要備份的數(shù)據(jù)文件列表,MML決定如何進(jìn)行最佳的備份。使用代理拷貝的優(yōu)點(diǎn)可以利用介質(zhì)管理層的高級(jí)特性,例如:從磁盤到磁帶的數(shù)據(jù)直接傳遞。使用代理拷貝的一個(gè)缺點(diǎn)是當(dāng)數(shù)據(jù)庫(kù)打開時(shí),每個(gè)要備份的數(shù)據(jù)文件都要在內(nèi)部設(shè)置為準(zhǔn)備份模式,類似于手工將表空間設(shè)置為熱備份模式。
五、 備份類型的比較
了解了RMAN進(jìn)行的備份、映像拷貝和代理拷貝之后,需要了解三種類型的優(yōu)缺點(diǎn),下表提供各類型的優(yōu)缺點(diǎn):
|
備份類型 |
優(yōu) 點(diǎn) |
缺 點(diǎn) |
|
備份 |
只包含使用過或更改過的數(shù)據(jù)塊,備份文件比較小。如果需要節(jié)約備份空間則生成備份集,備份集動(dòng)態(tài)為備份決定數(shù)據(jù)庫(kù)文件。 |
因?yàn)閺膫浞菁€原需要從一個(gè)或多個(gè)備份片中重新構(gòu)造數(shù)據(jù)文件,所以恢復(fù)的時(shí)間較長(zhǎng) |
|
映像拷貝 |
可以快速還原文件拷貝,如果回復(fù)時(shí)間很關(guān)鍵,可以采用映像拷貝 |
文件拷貝需要與數(shù)據(jù)庫(kù)文件同樣的大小,因此需要比備份集更多的空間;每個(gè)映像拷貝必須在備份命令中明確指定名稱,生成動(dòng)態(tài)腳本比較困難,而且映像拷貝只能寫到磁盤上 |
|
代理拷貝 |
可以利用MML的高級(jí)特性,較少考慮備份片和備份集的大小 |
需要第三方供應(yīng)商支持,增加支持復(fù)雜該特性文檔不全面 |
對(duì)于本章的練習(xí)需要以SYSDBA權(quán)限的用戶連接到目標(biāo)數(shù)據(jù)庫(kù),還需要鏈接到目錄數(shù)據(jù)庫(kù)上,采用如下的連接步驟:
2 RMAN>connect catalog rman1010/rman@rcat
3 RMAN>connect target sys/system@practice
練習(xí)20:創(chuàng)建恢復(fù)管理器的映像拷貝
該練習(xí)與打開、關(guān)閉數(shù)據(jù)庫(kù)的手工備份恢復(fù)練習(xí)非常相似,這里將用RMAN創(chuàng)建PRACTICE數(shù)據(jù)庫(kù)中所有數(shù)據(jù)文件和控制文件的拷貝。
步驟一:創(chuàng)建RMAN Copy腳本
在數(shù)據(jù)文件拷貝命令,必須要明確拷貝反而每個(gè)文件,并為拷貝的文件指定名稱。一個(gè)生成數(shù)據(jù)庫(kù)文件列表的快捷方法就是運(yùn)行REPORT SCHEMA命令,應(yīng)用該列表生成RMAN的拷貝腳本,從輸出結(jié)果拷貝文件名并黏貼到b_copy.rcv中。該腳本將拷貝數(shù)據(jù)文件和控制文件(盡管RMAN的腳本可以是任何名稱和文件擴(kuò)展名,但最好將這些文件的擴(kuò)展名設(shè)置為rcv)。
2 allocate channel d1 type disk;
3 copy
4 datafile 1 to 'D:\oracle\CODE\chap12\SYSTEM01.DBF.BAK',
5 datafile 2 to 'D:\oracle\CODE\chap12\UNDOTBS01.DBF.BAK',
6 datafile 3 to 'D:\oracle\CODE\chap12\SYSAUX01.DBF.BAK',
7 datafile 4 to 'D:\oracle\CODE\chap12\USERS01.DBF.BAK',
8 datafile 5 to 'D:\oracle\CODE\chap12\TOOLS01.DBF.BAK',
9 datafile 6 to 'D:\oracle\CODE\chap12\TS4DROP01.DBF.BAK',
10 datafile 7 to 'D:\oracle\CODE\chap12\USERS02.DBF.BAK',
11 current controlfile to 'D:\oracle\CODE\chap12\backup.ctl';
12 }
該命令中首先分配通道,然后執(zhí)行拷貝命令,RMAN將數(shù)據(jù)文件映像拷貝到提供的文件名,并且當(dāng)前的控制文件也被拷貝,當(dāng)執(zhí)行考背后釋放分配的通道。
步驟二:運(yùn)行RMAN Copy腳本
連接到目標(biāo)和目標(biāo)數(shù)據(jù)庫(kù),運(yùn)行剛才生成的腳本,然后用@符號(hào)來(lái)運(yùn)行RMAN命令文件:
這些消息說(shuō)明RMAN成功地編譯并執(zhí)行分配命令,通道的名稱為d1,目標(biāo)數(shù)據(jù)庫(kù)PRACTICE的會(huì)話ID為142,而生成的通道類型為DISK。
可以看到,拷貝命令為數(shù)據(jù)文件1生成一個(gè)映像拷貝文件system01.dbf.bak。
在該腳本的結(jié)尾,會(huì)得到恢復(fù)目錄的部分再同步:
在再同步期間,RMAN的拷貝記錄將與恢復(fù)目錄同步,在運(yùn)行模塊的最后,d1通道將從數(shù)據(jù)庫(kù)自動(dòng)釋放。
步驟三:驗(yàn)證RMAN Copy腳本
可以通過檢查RMAN腳本的輸出結(jié)果來(lái)驗(yàn)證映像拷貝,當(dāng)然也可以通過其他方法來(lái)驗(yàn)證是否成功創(chuàng)建了數(shù)據(jù)文件和控制文件的影響拷貝。
首先檢查D:\oracle\CODE\chap12目錄,這個(gè)目錄將為所有文件生成一個(gè)拷貝,接著在RMAN命令提示符下運(yùn)行l(wèi)ist copy命令:
這個(gè)輸出顯示了RMAN從以前腳本卡被的每個(gè)數(shù)據(jù)文件,還有以前進(jìn)行的其他拷貝,每個(gè)數(shù)據(jù)文件都有自己的備份號(hào),應(yīng)用備份編號(hào)可以維護(hù)每個(gè)映像文件拷貝,標(biāo)志為S的簾幕提供了備份片的狀態(tài)(AVAILABLE、UNAVAILABLE或EXPIRED)。如果這些映像拷貝在數(shù)據(jù)庫(kù)打開時(shí)被還原則必須應(yīng)用重做,以保證數(shù)據(jù)庫(kù)的其他部分與這些文件一致。LIST COPY命令并沒有顯示控制文件,因?yàn)槟J(rèn)顯示的文件類型是數(shù)據(jù)文件,為顯示控制文件的拷貝,需要在LIST COPY命令中增加OF CONTROLFILE:
現(xiàn)在已經(jīng)用RMAN對(duì)一個(gè)打開的數(shù)據(jù)庫(kù)進(jìn)行了備份。如何生成一個(gè)用來(lái)創(chuàng)建數(shù)據(jù)庫(kù)所有數(shù)據(jù)文件和控制文件映像拷貝的RMAN腳本?在SQL*PLUS中,可以從控制文件動(dòng)態(tài)視圖v$datafile中獲取數(shù)據(jù)庫(kù)所有文件的一個(gè)列表,將查詢的結(jié)果與其他所需要的RMAN命令一起組合到一個(gè)文件中。下面的命令可以在SQL*PLUS中生成一個(gè)RMAN腳本文件,需要注意的是用SQL內(nèi)建的函數(shù)INSERT和SUBSTR將從每個(gè)文件名從其目錄中分離出來(lái)。
2 set linesize 100 trimspool on
3 define dir='D:\oracle\CODE\chap12'
4 define fil='D:\oracle\CODE\tmp\b_copy_whole.rcv'
5 define div='\'
6 spool &file
7 prompt run {
8 prompt allocate channel d1 type disk;
9 prompt copy
10 select 'datafile ' || file# || ' to ' || '&dir.' || substr(name, (instr(name, '&div',-1))) || '.BAK, '
11 from v$datafile;
12 prompt current controlfile to '&dir.back.ctol;';
13 prompt }
14 spool off;

浙公網(wǎng)安備 33010602011771號(hào)