RMAN的備份原理

賀子_DBA時代發表於2018-06-04
今天看了DAVE對RMAN的備份原理的講解,真的令我受益匪淺,之前只是能夠熟練地運用該工具,卻不知所以然。今天總算對RMAN的備份原理深入了一把。
以下是我個人對DAVE講的內容以及網上的文章的進行整理。
注:本文只對RMAN的備份原理進行探究,並不講到如何對資料庫進行備份。
RMAN的組成
RMAN是SMR(Server Managed Recovery:伺服器管理恢復)的具體實現。
RMAN主要有兩部分組成:可執行檔案rman.exe和recover.bsq檔案
rman.exe和大部分exe檔案一樣,是rman的啟動檔案,如:
當我們執行rman target /,就是透過rman.exe連線上rman
recover.bsq檔案實際上是庫檔案,rman程式從recover.bsq檔案中解析程式碼來建立在目標資料庫上執行的PL/SQL呼叫。
比如我們在登入rman後發出backup database,那麼rman就會根據該語句在recover.bsq檔案中解析出PL/SQL程式碼塊,讓資料庫執行。
所以說rman只是起了協調作用,並不真正地幹活。
RMAN的使用者許可權
在oracle 11g中,rman是透過sys許可權連入資料庫的
因為rman需要訪問目標資料庫上sys使用者,還需要有啟動和關閉資料的許可權。
但是,平時我們直接在rman target /連線時候,就算rman不是sys許可權也能連入,那是因為他跟sqlplus / as sysdba一樣,是作業系統認證。若是rman沒有sys許可權,進行遠端連線,那麼肯定會報許可權不足的錯誤。
在12c中,rman許可權又發生了改變。
RMAN與控制檔案
1.rman透過直接讀取控制檔案裡面的資訊
2.控制檔案裡面記錄了rman的備份資訊
控制檔案分為兩部分
不可變部分
可變部分記錄的是資料檔案,日誌檔案的路徑,檔名,表空間資訊,資料庫名等等。這部分的資料是不會被覆蓋掉的。
RMAN就是透過讀取該部分資訊,方便自己對資料庫進行備份恢復。
可變部分
當我們的RMAN是nocatalog方式的話,RMAN所備份的資訊(包括備份的記錄,備份開始和結束時間的檢查點)就是記錄在這一部分之內,當然這一部分還記錄了很多其他資訊。但是當這部分的資訊滿了,外部還需要往這部分裡面寫入資料,那麼就需要覆蓋這裡面的資訊,包括RMAN的備份資訊。這時為了我們的備份資訊不被覆蓋,就需要設定下面的引數:
controlfile_record_keep_time:該引數是指定RMAN的備份資訊在控制檔案中多少天不被覆蓋。
show parameter control
SQL> show parameter control _file_record_keep_time

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time        integer     7

Oracle預設是為7天,但具體應該設定為多少天,應該根據我們生產過程中備份計劃來定。
快照控制檔案
RMAN在備份的時候需要讀一個一致性的控制檔案,但是控制檔案是一個IO比較頻繁的檔案,在備份過程中難免發生修改,若是我們在備份過程中鎖定了控制檔案已達到這種目的,那就悲劇啦。資料庫的很多業務都會無法正常執行。
因此,Oracle透過快照控制檔案來解決這個問題。
當我們用RMAN執行備份的時候,在$ORACLE/dbs下會產生一個快照控制檔案。
[oracle@potato dbs]$ ll
total 9556
-rw-rw---- 1 oracle oinstall    1544 Jul 26 15:09 hc_orcl.dat
-rw-r--r-- 1 oracle oinstall    2851 May 15  2009 init.ora
-rw-r----- 1 oracle oinstall      24 Jul 26 15:13 lkORCL
-rw-r----- 1 oracle oinstall    1536 Jul 26 15:38 orapworcl
-rw-r----- 1 oracle oinstall 9748480 Jan 13 23:25 snapcf_orcl.f
-rw-r----- 1 oracle oinstall    2560 Jan 13 23:18 spfileorcl.ora
如上,snapcf_orcl.f便是快照控制檔案,RMAN透過讀取該檔案裡資訊來代替真的控制檔案裡的內容。有效地解決該問題。、
RMAN伺服器程式
rman連線到目標庫的客戶端時會建立兩個伺服器程式

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

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

RMAN所呼叫的兩個資料包
RMAN通道服務程式在協調工作時要訪問兩個sys資料包BMS_RCVMAN和DBMS_BACKUP_RESTORE,這倆包包含rman在目標庫操作的所有功能。
這兩個包是在建立資料庫時,執行cataproc.sql指令碼安裝的,它們是被硬編碼到Oracle軟體的庫檔案中的,所以即使沒有開啟資料庫也能呼叫這些資料包。
SYS.DBMS_RCVMAN用來訪問控制檔案並校驗所必須的資訊,並將此資訊傳遞給rman服務程式,rman服務程式會基於recover.bsq檔案中的程式碼建立pl/sql塊。這些pl/sql塊會呼叫SYS.DBMS_BACKUP_RESTORE,進行資料檔案,控制檔案的和歸檔的redo log的備份。備份集完成後,SYS.DBMS_BACKUP_RESTORE會往控制檔案中記錄備份資訊。
RMAN備份過程
  備份開始後,建立一個通道程式(應為現在使用的是預設設定),因為沒有使用i/o從屬,通道程式會在pga中分配。rman主要程式透過編譯一個DBMS_RCVMAN呼叫,從目標庫控制檔案解析出資料庫結構資訊(確定目標庫版本和控制檔案資訊(型別,當前序列號,建立時間))。編譯檔案列表後,之後RMAN便會建立快照控制檔案,rman建立對DBMS_BACKUP_RESTORE的呼叫,並根據資料檔案數分配輸入和輸出緩衝區(分配記憶體)。分配了記憶體後,rman初始化備份片,備份片得到了一個唯一的預設名字。當備份片初始化完成,通道程式開始資料庫備份。rman會判斷是需不需要對引數檔案和控制檔案進行備份。之後,rman建立對DBMS_BACKUP_RESTORE的呼叫,並根據資料檔案數分配輸入和輸出緩衝區(分配記憶體)。分配了記憶體後,rman初始化備份片,備份片得到了一個唯一的預設名字。完成控檔案制和spfile的備份,通道程式開始讀取資料檔案並將資料塊輸入緩衝區到輸出緩衝區的記憶體對記憶體的寫操作。在這個寫操作期間,任滿會判斷塊是否被初始化或資料塊頭資訊是否為零。如果塊用過(塊頭資訊不為0,若是塊頭資訊為0,該塊可以丟棄不寫,這也是RMAN的優點之一),rman會在這個塊上執行效驗操作。如塊頭和腳註不匹配,rman會指出存在訛誤的資料塊並終止備份。如透過資料塊被推入輸出緩衝區。 一般輸出緩衝區填滿,就會把輸出緩衝區的內容轉存到備份檔案位置。當所有檔案透過記憶體緩衝區過濾,就完成備份片,同時RMAN會在目標資料庫的控制檔案中寫入備份資訊。

注:以上部分內容來源於網路。

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

相關文章