教你如何成為Oracle 10g OCP - 第十三章 RMAN管理的備份與恢復

tolywang發表於2010-09-23


RMAN (RECOVERY MANAGER)管理的備份與恢復

----  認識資料庫物理備份和邏輯備份

參考 
      http://space.itpub.net/35489/viewspace-539639 

ORACLE中資料備份分為物理備份和邏輯備份兩種。物理備份就是轉儲ORACLE
物理檔案(如資料檔案、控制檔案、歸檔日誌檔案等,以Block為單位的動作),
一旦資料庫發生故障,可以利用這些檔案進行還原;邏輯備份就是對資料庫對
象(如使用者、表、儲存過程等)利用類似EXPORT等工具進行匯出工作(以SQL語句
等指令碼為單位的動作),可以利用IMPORT等工具把邏輯備份檔案匯入到資料庫。


RMAN備份是一種物理備份,不是物件級的邏輯備份,可以用RMAN來備份資料檔案、
控制檔案、引數檔案、歸檔日誌檔案。在資料庫出現問題的時候可以透過RMAN
物理備份恢復到資料庫的失效點。


邏輯備份是透過邏輯手段記錄要備份的資料庫物件的資訊,是一種物件級備份
的方案,因此邏輯備份的備份集的可移植性比較強,可以把資料庫的邏輯備份
恢復到不同版本不同平臺的資料庫上,也正是因為邏輯備份是物件級的備份,
因此備份和恢復的效率比較低,對於大型的系統,採用邏輯備份,其恢復時間之
長是大多數大型業務系統所不能忍受的。 相對而言,物理備份不具備移植性,
備份環境和恢復環境必須是完全相同的,由於物理備份是對資料庫的檔案(Block)
進行備份,其備份和恢復速度相對比較快,在大型業務系統中較多地使用物理備份。
總之,邏輯備份效率低可以跨平臺,物理備份效率高不能跨平臺。

注意: RMAN backup可以實現僅備份使用過的block從而提高備份效率(當然
10.2.0.2及以後版本RMAN僅僅備份有資料的塊)。 熱備份是以OS Block為單位做備份,RMAN備份是以Oracle Block為單位做備份 。  

 


RMAN優缺點 ----  

1). 能備份資料檔案,歸檔日誌檔案,控制檔案及spfile;
2). 能自動維護備份相關的後設資料,包含備份的檔名稱,完成備份時的SCN號等;
3). 只備份使用過的資料塊(10.2.0.2及以後只備份有資料的塊),節省空間佔用;
4). 可以把備份的輸出打包成備份集,也可以按固定大小分割備份集;
5). 能對備份檔案進行壓縮,節省空間;
6). 備份過程中,RMAN能檢測是否出現損壞的資料塊(預設enable檢測物理壞塊,
    disable檢測邏輯壞塊,需要手工指定才可以開啟檢測邏輯壞塊);
7). 可以在塊水平上實現增量,節省了完成備份需要的時間 等; 
8). RMAN可以在目標資料庫mount 的情況下對資料庫進行備份 , 在資料庫close的情況下進行恢復 ;   
9). 並行的備份與恢復,提升速度;
9). 自動完成,不需要人為干預 ;
10).線上備份時,表空間不用置於備份模式 ; 
缺點: rman的缺點是使用起來技術性比較強

備註: RMAN在目標資料庫mounted的情況下也能進行備份,主要是由於對recover.bsq文
件中兩個包dbms_rcvman及dbms_backup_restore執行, 這兩個包都是硬編碼在Oracle
軟體中,資料庫沒有啟動也能呼叫執行。

 


13.1.1  RMAN的備份體系

目標庫(target database) -- 需要備份的資料庫 。
備註: RMAN只能使用專用連線方式建立到目標資料庫的連線,不能使用共享連線的方式。


備份原理及備份過程 ---

RMAN備份基本過程 ---

在備份過程中,RMAN讀取目標資料庫上的控制檔案,從而獲得目標資料庫裡包含哪些資料
檔案、歸檔日誌檔案分佈在哪裡以及各個檢查點SCN號等資訊,從而能指導RMAN完成備份和
恢復的具體操作。 當RMAN獲得了需要備份的檔案列表以後,在將資料備份到備份介質上時,
需要建立到這些備份介質的通道(channel),每次備份時,我們就可以透過RMAN建立多個通
道以加快處理速度。  RMAN會為每個通道在目標資料庫上建立一個對應的伺服器程式,通道
型別有兩種: 磁帶和磁碟, 如果是磁碟,我們可以透過分配磁碟型別的通道(device type
disk),將資料備份到閃回恢復區(Flash Recovery Area);  如果分配的是磁帶,我們需要
透過藉助MML(Media Manangement Library), 使得RMAN可以將備份的資料透過MML傳到磁帶。

 

RMAN備份基本原理 ---

RMAN基於備份演算法規則來編譯要備份的資料檔案列表。基於通道數和同時備份的資料檔案
數,RMAN在ORACEL共享記憶體段中建立一些記憶體緩衝區, 一般是在PGA中, 不過有時候記憶體緩
衝區會被推入SGA。通道服務程式隨後就開始讀取資料檔案,並在RMAN緩衝區中填充這些資料
塊。一個緩衝區被填滿時,輸入緩衝區的資料就會推出到輸出緩衝區。資料檔案中的資料塊都
會發生這種memery-to-monery write 的過程,如果資料塊符合備份的標準,並且memery-to-monery
write操作沒有檢查到資料corruption則該資料塊會被儲存到輸出資料緩衝區中,直到輸出緩
衝區被填滿。一但輸出緩衝區被填滿,輸出緩衝區的內容就會被推到備份位置(磁碟或者磁帶)

參考:
http://www.itpub.net/viewthread.php?tid=1024391 
http://space.itpub.net/35489/viewspace-614151 
http://space.itpub.net/35489/viewspace-539639

 

RMAN備份詳細過程 ---

    RMAN發出備份全庫命令後,RMAN生成到目標資料庫的bequeath連線,也就是說會檢查
ORACLA_SID變數中的例項名,並在該例項上產生一個伺服器程式,然後作為sysdba登陸,
然後會產生一個作為備份的通道(在PGA或者是在SGA分配儲存)。隨後RMAN呼叫SYS.DBMS_RCVMAN
請求資料庫結構資訊,包括控制檔案的資訊(當前序列號,建立時間……)由於指定了備份
全庫,所以RMAN會請求資料庫中資料檔案資訊,並判斷是否存在offline資料檔案(包括所在
的位置和工作方式)。
    RMAN開始備份,為了保持資料一致性RMAN必須構建控制檔案快照,接下來RMAN呼叫
DBMS_BACKUP_RESTORE資料包,該呼叫可以建立備份片。RMAN擁有檔案列表,所以它為資料文
件讀取操作分配記憶體緩衝區,分配緩衝區後RMAN初始化備份片。一旦初始化了備份片,RMAN
會判斷是否使用了伺服器引數檔案,如果使用了則會做為備份的一部分,還要備份控制檔案,
之後才開始備份資料檔案,並將其推至記憶體。為了實現這一功能,通道程式在磁碟上執行預
讀取操作,並且將多個資料檔案讀入記憶體中,RMAN會判斷資料塊頭資訊是否仍然為零,如果
資料塊沒有被使用過,就不會發生到輸出緩衝區的寫操作,同時會丟棄這個資料塊(這就RMAN
為什麼會只備份使用過的資料的原因,也是它的優點); RMAN還會執行檢查資料塊有沒有
corruption操作。當檢查透過了就被寫入到輸出緩衝區。一旦輸出緩衝區填滿了,就被推至
備份檔案位置。
    在備份資料塊的時候,RMAN影子程式會得到備份狀態資訊。並將它傳給V$session_longops
檢視。查詢它能得到資訊。
    當資料檔案的所有資料塊都被讀入輸入緩衝區並確定了狀態之後RMAN就會透過將這個資料
檔案寫入備份片來結束該檔案的備份操作。所有資料檔案寫入備份片之後,RMAN生成最後一個
對SYS DBMS BACKUP RESTORE 資料包的呼叫,該呼叫在控制檔案中寫入備份資訊(包括備份片
名,啟動備份操作時的檢查點的SCN和完成備份的時間)。備份過程結束。

 

RMAN資訊庫(RMAN repository) ---

備份過程中產生的後設資料,包括備份檔案的名稱、路徑、完成備份的時間、檢查點SCN 等
這些用來描述備份檔案的資料,存放的地點叫做RMAN資訊庫。RMAN資訊庫可以存放在兩個
不同的地點: 目標資料庫的控制檔案,或者恢復目錄(Recovery Catalog)裡 。

 

控制檔案中的內容 ---

控制檔案中存放的資料可以分為兩類: 可刪除的記錄(包括歸檔日誌檔案的歷史記錄以及
RMAN備份的後設資料)和不可刪除的記錄(包括資料檔案列表和聯機日誌檔案列表等),如果
需要在控制檔案中存放新的記錄,則可以透過刪除那些可刪除的記錄,為新的記錄提供
可用的空間,如果RMAN備份的後設資料被刪除,RMAN就不能獲得有關備份的資訊,從而也就
不能進行恢復了。

控制檔案主要包含如下條目,可以透過dump控制檔案內容看到 :
DATABASE ENTRY
CHECKPOINT PROGRESS RECORDS
REDO THREAD RECORDS
LOG FILE RECORDS
DATA FILE RECORDS
TEMP FILE RECORDS
TABLESPACE RECORDS
LOG FILE HISTORY RECORDS
OFFLINE RANGE RECORDS
ARCHIVED LOG RECORDS
BACKUP SET RECORDS
BACKUP PIECE RECORDS
BACKUP DATAFILE RECORDS
BACKUP LOG RECORDS
DATAFILE COPY RECORDS
BACKUP DATAFILE CORRUPTION RECORDS
DATAFILE COPY CORRUPTION RECORDS
DELETION RECORDS
PROXY COPY RECORDS
INCARNATION RECORDS

可以透過設定初始化引數controlfile_record_keep_time來決定控制檔案中可刪除
的記錄所佔用的空間,預設為7,表示控制檔案中始終保持最近7天的可刪除記錄,
也就是說7天之前的備份資訊及歸檔日誌檔案的歷史記錄被刪除。如果設定為0,可重用部分就不會擴充套件,只要需要records就可以被重用。

 

恢復目錄(Recovery Catalog) ---

為了讓備份資訊以及歸檔日誌檔案的歷史記錄儲存更長的時間,Oracle還提供了恢復
目錄(Recovery Catalog)來存放RMAN資訊庫。恢復目錄由資料庫裡的多個表和儲存過程
組成,這些物件位於同一個schema下。用表來存放RMAN備份的後設資料,可以永久性的
儲存下去,而不用刪除歷史記錄來釋放空間。

恢復目錄是可選的配置,不是必需的。其中的資料從目標庫的控制檔案那裡同步過來。
RMAN 的後設資料始終都必須要存放一份在目標資料庫的控制檔案中,並不會因為我們配置
了恢復目錄,就不在控制檔案中記錄備份的後設資料了,在使用RMAN完成備份恢復操作以後,
會將控制檔案裡的RMAN後設資料同步到恢復目錄裡,只不過,預設情況下,controlfile中
的後設資料只保留最近7天的資訊,恢復目錄中則可以保留更長時間的後設資料。不僅如此,
恢復目錄還可以同時為多個目標資料庫服務。 因此我們可以在同一個恢復目錄裡保留多個
目標資料庫相關的RMAN後設資料。

備註: 可以這樣理解,如果存在恢復目錄,那麼目標庫的控制檔案類似“聯機日誌檔案”,
而恢復目錄就類似“歸檔日誌檔案”, 恢復目錄中的所有內容都是從目標庫的控制檔案
中同步過來的,而預設情況下,目標庫中的控制檔案只是記錄7天的後設資料資訊,而恢復
目錄可以保留更長時間的後設資料 (像歸檔一樣) 。 

如果要使用恢復目錄,則在使用RMAN時,除了要建立到目標庫的連線之外,還必須建立到
恢復目錄所在資料庫的連線,並在恢復目錄所在庫中建立對應的伺服器程式和session.

 

 

RMAN 的組成及工作過程 --- 可執行程式及recover.bsq

RMAN由可執行程式和名為recover.bsq的指令碼檔案組成,RMAN可執行程式就是命令列介面
(命令解釋程式),在備份和恢復過程中,它完成的實質性工作很少,進行的大部分都是協
調工作。

備份恢復工作的實質性工作是由目標資料庫上的程式包完成的,對目標資料庫上包的呼叫
就要藉助於recover.bsq 指令碼檔案了,該檔案在$ORACLE_HOME/rdbms/admin目錄下,開啟
檔案可以看到裡面都是各種PL/SQL指令碼塊。事實上,在RMAN互動介面中輸入的各種命令,
都會被RMAN可執行程式轉化為對recover.bsq檔案中的各種相關的PL/SQL塊的呼叫,並將
相關的PL/SQL塊傳遞到目標資料庫上去執行,從而完成對資料庫的備份與恢復,可以說,
recover.bsq 才是RMAN備份恢復的核心 。

在recover.bsq檔案包含的PL/SQL塊中,主要呼叫了目標資料庫中以下兩個程式包。
dbms_rcvman : 用來讀取目標庫的控制檔案資訊,將這些資訊傳給RMAN, 從而RMAN可以
獲得要備份的檔案列表以及其他所需的資訊。
dbms_backup_restore :  完成具體的備份恢復工作,並在控制檔案中寫入備份的後設資料,
比如建立備份的時間,路徑,大小等。

而且由於RMAN可以在資料庫關閉的情況下進行備份,因此這兩個包都是硬編碼在Oracle
軟體中的,在資料庫沒有啟動的時候也能呼叫執行。

因為RMAN在備份恢復過程中,可能會需要啟動和關閉資料庫,因此在與目標資料庫建立
連線時,必須以具有sysdba許可權的使用者身份進行連線。

RMAN備份是一個資料塊一個資料塊的讀取和寫入,如果在備份某個資料塊時,發現它是
一個髒資料塊,那麼他可以等DBWn將記憶體裡的內容重新整理到資料檔案以後,才備份該資料
塊,因此RMAN是不需要發出begin backup命令的。 同時,RMAN備份處理split block與
熱備份不一樣,它不存在redo log激增的問題,是因為它在執行備份每個資料塊的時候
會判斷這個資料塊是否是split的(RMAN比較塊頭塊尾保證塊的完整性),如果是,它會重
新讀這個資料塊直到得到一個consistent version。

在Oracle10.2.0.1及以前,RMAN只會對使用過的資料塊進行備份(不管當前是否有資料),
因為RMAN可以在資料庫關閉的情況下備份,因此RMAN備份時,只能從物理層面來判斷某
資料塊是否被使用過,如果某資料塊頭部被格式化過,RMAN就認為它被使用過,就會備份
該資料塊。 但是Oracle10.2.0.2 或以後,Oracle只備份當前有資料的資料塊 。

 


13.1.2  快速閃回區(Flash Recovery Area)

在Oracle10g中,Oracle為RMAN備份檔案設定了預設的路徑,也就是快速閃回區(Flash
RecoveryArea), 該區域可以是檔案系統上的一個目錄,也可以是ASM裡的某個磁碟組。當
然RMAN備份檔案可以不放在快速閃回區,但是透過對快速閃回區可以簡化對RMAN備份檔案
的管理。這塊區域的檔案都是OMF(Oracle Mananged File)管理的,檔名稱大小都是由
Oracle自己來管理。而且該區域的空間管理也是自動的,當空間不足時,Oracle會根據
配置的冗餘策略,刪除不再需要的備份檔案,空間出現壓力時,會在alert log中記錄該
資訊。

透過下面兩個引數設定快速閃回區:
db_recover_file_dest_size - 快速閃回區的大小
db_recover_file_dest - 快速閃回區的位置

SQL> show parameter db_recover

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      /u01/product/flash_recovery_area
db_recovery_file_dest_size           big integer 2G
SQL>

當然快速閃回區不僅可以儲存RMAN的備份檔案,還可以存放控制檔案(11g預設就會有一個控制
檔案存放在此),聯機日誌檔案,歸檔日誌以及閃回資料庫的閃回日誌檔案等。

我們可以透過v$flash_recovery_area_usage來了解該區域的使用情況,可以看到這塊區域
可以儲存的檔案有很多,比如 controlfile, onlinelog , archivelog, backuppiece,
imagecopy(映象副本), flashbacklog(閃回日誌),還可以看他們的空間使用率。


備註:  閃回恢復區設定完成後,備份的過程就非常簡單,首先需要規定閃回恢復區是使
用CONFIGURE備份的預設配置。然後,執行BACKUP或BACKUP AS COPY 命令,備份就會直接送
往閃回恢復區中進行集中儲存。 

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

相關文章