RMAN筆記——綜合概述

紅葉DBA發表於2011-02-27

RMAN 綜合概述

1.          RMAN 的核心是命令解釋程式,接受使用者輸入的命令,並將這些命令轉化為遠端資料庫上執行的遠端過程呼叫(remote procedure call RPC )。

2.        RMAN 只做少量工作,是Database Utilities (一組命令列形式的程式)的一部分。

3.        RMAN 實用程式分為兩部分:可執行檔案、recover.bsq 檔案,recover.bsq 實際上是庫檔案,可執行檔案從recover.bsq 檔案中吸取程式碼,來建立在目標資料庫中執行的PL/SQL 呼叫,recover.bsq 是整個操作的中樞,這兩個檔案在邏輯上構成了RMAN 的客戶端,他們的版本必須相同,否則不能正常工作。

4.        RMAN 需要訪問目標資料庫中sys 模式的各種資料包,所以要以sysdba 登入。

5.        RMAN 在整個備份期間都要使用到控制檔案,為了整個備份時間間隔內的控制檔案的一致性,Oracle 實用快照控制檔案來解決這個問題,快照控制檔案(snapshot controlfile )預設儲存在dbs database 目錄中,snapcf+SID.f 檔案。快照檔案在同一時間只能被一個程式鎖定,如果在兩個RMAN 工作中,就有可能出現RMAN-08512 waiting for snapshot controlfile enqueue 錯誤,使用如下指令碼可以查詢:

6.        Select s.sid,username,program,module,action,logon_time,l.* from v$session s,v$enqueue_lock l where l.sid=s.sid and l.type= CF and l.id1=0 and l.id2=2;

7.        I/O 從屬,此時記憶體緩衝區在SGA 中,當dbwr_io_slaves 被設定為非值(1~32 )時,RMAN 為每個通道啟用個從屬程式來輔助磁碟IO 。當backup_tape_io_slaves=true 時,RMAN 也會為磁碟讀寫分配從屬程式。

8.        RMAN 主要訪問兩個sys 包:dbms_rcvman dbms_backup_restore, 這兩個包包含了RMAN 的所有功能,這兩個包在catproc.sql 指令碼中建立。

9.        Dbms_rcvman 包用來收集控制檔案中的資訊,並返回給RMAN 。然後RMAN 在通道間執行基於負載均衡的演算法來分配工作,然後建立一系列的dbms_backup_restore 資料包的呼叫。每完成一個備份集,dbms_backup_restore 就會在控制檔案中儲存相關的備份資訊,包括備份名,大小,開始時間,備份時間等。

10.     資料塊備份的過程:RMAN PGA (有時在SGA ,如果使用了I/O 從屬程式)中建立一系列的緩衝區,讀取資料檔案時,填充這些緩衝區,緩衝區被填滿時,資料傳到輸出緩衝區,如果符合備份標準且無錯誤,就會保留在輸出緩衝區,一旦輸出緩衝區被填滿,則寫入到備份檔案。當所有的檔案都經過了這種過濾的時候,就完成了資料塊的備份。

11.        關於空值壓縮的誤解:

1)       要刪除空資料塊:RMAN 只有從檔案頭和資料塊頭資訊中推斷資料塊的內容,而不需要空間管理資訊,因為空間管理資訊在開啟資料庫時有效,而RMAN 不依賴資料庫的開啟與否。因此,如果截斷一張表,那麼所有儲存過資訊的空資料塊都會備份,因為Oracle 只知道這個塊被初始化過了,而不知道是否為空。

2)    備份期間的增量備份可以節約時間:RMAN 任然需要將每個資料塊讀入記憶體,如果裝置(磁碟或磁帶)很快,那麼刪除記憶體中資料的速度不見得會節約多少時間。

12.     10g 中,RMAN 使用空白壓縮,提供了備份塊自身的壓縮,另外,塊更改跟蹤檔案可以在備份期間跳過一些塊,不將他們讀入記憶體,從而節約備份時間。

13.     輸入記憶體緩衝區:備份集內檔案數目n

l  0,每個檔案分配1M 緩衝區,總大小<=16M 

l  4,每個檔案分配512K 緩衝區,總大小<=16K 

l  n>8 ,每個檔案分配128K 緩衝區。

14.     可以從v$backup_async_io 檢視中看出每個檔案的緩衝區大小:

Select set_count,device_type,type,filename,buffer_size,buffer_count,open_time,close_time from v$backup_async_io;

15.     輸出記憶體緩衝區:

u  當輸出裝置為磁碟時,每個通道分配1M 的輸出緩衝區,總大小4M 

u  當輸出裝置為磁帶時,每個通道分配256K 的緩衝區,總大小為1M 

16.     還原操作中,輸出緩衝區為128K ,每個通道個。當裝置為磁碟時,輸入緩衝區為每個通道1M 的,裝置為磁帶時,輸入緩衝區為個大小為blksize (通常為256K )。

17.     RMAN 50M 為增量分配磁碟空間,在第一個50M 填滿以後,才開始分配第二個50M ,直到最後一個資料塊備份完,然後釋放最後一個備份塊中的剩餘空間。RMAN 在分配時不會檢查是否有剩餘空間可用,因為空值壓縮和空白壓縮都能減小所需要的空間,這是不可預測的大小,RMAN 在磁碟可用空間用完時會失敗。

18.     可以從v$session_longops 檢視中檢視RMAN 備份的最新程式:

Select sid,serial#,context,sofar,totalwork,round(sofar/totalwork*100,2) %_complete from v$session_longops where opname like  RMAN%  and opname not like %aggregate%  and totalwork!=0 and sofar!=totalwork;

19.     如果想要進一步瞭解備份期間的RMAN 內部工作流程,可以開啟RMAN 的除錯選項(輸出專案非常詳細,可能會影響到備份的效能):

        rman target / debug trace=/xxx/rman.out

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

相關文章