RMAN備份恢復原理

tolywang發表於2009-07-08

作者:BraveHeart


rman的核心是命令解釋程式,當你輸入命令,命令解釋程式將這些命令轉換為資料庫上的遠端過程呼叫(RPC)。備份和恢復資料庫一個資料庫的具體工作實際上是由目標資料庫上的程式完成的。

rman的程式由兩部分組成:可執行檔案和recover.bsq。

可執行檔案從recover.bsq中析取程式碼來建立在目標資料庫上執行的pl/sql呼叫。recover.bsq是庫檔案,是rman操作的中樞。這倆檔案始終保持連線。

rman需要訪問目標庫sys模式中存在的各種包,還需要有啟動關閉資料庫的許可權。所以rman要以管理員身份連線目標資料庫。

rman是一個客戶端程式,需要透過oracle NET 連線目標資料庫。

rman連線目標資料庫需要建立一個專用伺服器程式連線目標庫的tnsname.ora條目。


rman生成一個到目標庫的客戶端連線時會建立兩個服務程式:

主要程式:生成對sys包的呼叫,從而執行備份和恢復操作,並協調工作。

次要程式:輪詢rman的長事務並在內部記錄資訊。


rman的通道程式:

除預設上面連線時間裡的2個程式。在備份和還原操作期間還會為分配的每個通道建立一個通道程式。

通道程式是目標資料庫上的服務程式。

通道程式作用是在備份期間協調讀取資料檔案和寫入指定位置的操作,在還原期間則協調讀取備份位置和在資料檔案位置寫入資料塊的操作。

通道分:磁碟和磁帶通道2類。我們只能為一個備份分一個型別的通道。

 

rman通道服務程式在協調工作時要訪問兩個sys資料包BMS_RCVMAN和DBMS_BACKUP_RESTORE,這倆包包含rman在目標庫操作的所有功能。

SYS.DBMS_RCVMAN用來訪問控制檔案中的表,並將此資訊傳遞給rman服務程式,rman服務程式會基於recover.bsq檔案中的程式碼建立一些pl/sql塊。這些pl/sql塊含有對SYS.DBMS_BACKUP_RESTORE的呼叫。SYS.DBMS_RCVMAN使rman可以構建準確反映資料庫結構的備份與

還原操作。在任何操作前設定TIME運算子和效驗資料檔案頭中的檢查點資訊,並檢查檔案位置大小,以及有關節點相似性(RAC)和磁碟相似資訊。

rman是由接受到的SYS.DBMS_RCVMAN返回的資訊,在通道間基於負載均衡分配工作,建立一系列SYS.DBMS_BACKUP_RESTORE的系統呼叫,以備份資料檔案,控制檔案(備份的是快照資料檔案)和歸檔檔案。一旦完成一個備份集SYS.DBMS_BACKUP_RESTORE會在控制檔案的表中寫入備份開始的時間,備份時間,備份大小和備份名等資訊。

catproc.sql可以預設安裝上面的兩個包。


對於恢復目錄也存在2個包:DBMS_RCVMAN和DBMS_RCVCAT

DBMS_RCVMAN包和上面的rman的DBMS_RCVMAN一樣,DBMS_RCVCAT和上面的DBMS_BACKUP_RESTORE有一點不同就是資訊寫入資訊的物件不同。DBMS_RCVCAT將資訊寫入目標庫的控制檔案,DBMS_BACKUP_RESTORE將資訊寫入恢復目錄。


i/o叢屬是在藏緩衝區寫滿後,將藏緩衝區內容寫入磁碟時喚醒另外的dbwr從屬來執行磁碟寫操作。
只有os不支援非同步i/o時,i/o從屬才起作用。
dbwr_io_slaves可以配置磁碟i/o從屬。
因為磁帶不存在i/o非同步,所以要為磁帶配置i/o從屬 backup_tape_io_slaves .

為了實現i/o從屬功能rman必須利用一個共享記憶體區域,磁碟備份的記憶體緩衝區會被推入共享池,如果存在large池要推入large池。


以下例為例詳細說明一下:

Microsoft Windows XP [版本 5.1.2600]
(C) 版權所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\GAOYANG>rman

Recovery Manager: Release 10.2.0.1.0 - Production on Wed Jan 14 08:43:43 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

RMAN> connect target /

connected to target database: RMAN (DBID=1562476476)

RMAN>backup database;


1 . C:\Documents and Settings\GAOYANG>rman
進入rman軟體

2 . connect target /
透過oracle NET 連線目標資料庫以sysdba連線目標資料庫,rman連線目標資料庫建立一個專用伺服器程式,並建立兩個服務程式主要程式和次要程式。

 

3 . backup database;
建立一個通道程式(應為現在使用的是預設設定),因為沒有使用i/o從屬,通道程式會在pga中分配。rman主要程式透過編譯一個DBMS_RCVMAN呼叫,從目標庫控制檔案解析出資料庫結構資訊(確定目標庫版本和控制檔案資訊(型別,當前序列號,建立時間))。
由於這個是資料庫完全備份,所以rman會請求資料庫的每一個資料檔案的資訊,判斷是否離線,所在磁碟和資料檔案工作方式。由於使用預設設定,只存在一個通道一個備份集。

編譯檔案列表後,rman就準備開始備份了。為了保持一致性rman會構建控制檔案快照。如存在老控制檔案快照,rman會重新寫為新的快照控制檔案。

rman建立對DBMS_BACKUP_RESTORE的呼叫,並根據資料檔案數分配輸入和輸出緩衝區(分配記憶體)。分配了記憶體後,rman初始化備份片,備份片得到了一個唯一的預設名字。

當備份片初始化完成,通道程式開始資料庫備份。rman會判斷是否使用了spfile,如果用了spfile會自動備份spfile成為備份集的一部分。還要備份當前的控制檔案(快照控制檔案)。只要備份system表空間(資料檔案1)就自動備份控制檔案(開啟控制檔案自動備份)。

完成控檔案制和spfile的備份,通道程式開始讀取資料檔案並將資料塊推入輸入緩衝區,之後從輸入緩衝區到輸出緩衝區的記憶體對內

存的寫操作。在這個寫操作期間,任滿會判斷塊是否被初始化或資料塊頭資訊是否為零。如果塊用過(塊頭資訊不為0),rman會在這個塊上執行效驗操作。如塊頭和腳註不匹配,rman會指出存在訛誤的資料塊並終止備份。如透過資料塊被推入輸出緩衝區。

一般輸出緩衝區填滿,就會把輸出緩衝區的內容轉存到備份檔案位置。輸出緩衝區裡有來自各個資料檔案的塊雜亂無章,只有rman能在還原到正確位置。在備份片寫入資料塊時,可從rman的次要程式得到備份的狀態資訊,次要程式在目標資料庫上檢查遠端過程呼叫資訊。

一旦一個資料檔案的所有資料塊都被讀入輸入緩衝區並且確定了狀態,rman就會透過將這個資料檔案頭寫入備份片來結束該檔案的備份操作。所有資料檔案頭都被寫入備份片之後,rman會生成最後一個對DBMS_BACKUP_RESTORE的呼叫,這個呼叫想控制檔案中寫入備份資訊,包含備份片名,啟動備份操作時的scn,完備操作時間。

這就是備份的所有工作流程!

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

相關文章