今天看了DAVE對(duì)RMAN的備份原理的講解,真的令我受益匪淺,之前只是能夠熟練地運(yùn)用該工具,卻不知所以然。今天總算對(duì)RMAN的備份原理深入了一把。
以下是我個(gè)人對(duì)DAVE講的內(nèi)容以及網(wǎng)上的文章的進(jìn)行整理。
注:本文只對(duì)RMAN的備份原理進(jìn)行探究,并不講到如何對(duì)數(shù)據(jù)庫進(jìn)行備份。
RMAN的組成
RMAN是SMR(Server Managed Recovery:
服務(wù)器管理恢復(fù))的具體實(shí)現(xiàn)。
RMAN主要有兩部分組成:可執(zhí)行文件rman.exe和recover.bsq文件
rman.exe和大部分exe文件一樣,是rman的啟動(dòng)文件,如:
當(dāng)我們執(zhí)行rman target /,就是通過rman.exe連接上rman
recover.bsq文件實(shí)際上是庫文件,rman程序從recover.bsq文件中解析代碼來創(chuàng)建在目標(biāo)數(shù)據(jù)庫上執(zhí)行的PL/SQL調(diào)用。
比如我們?cè)诘卿況man后發(fā)出backup database,那么rman就會(huì)根據(jù)該語句在recover.bsq文件中解析出PL/SQL代碼塊,讓數(shù)據(jù)庫執(zhí)行。
所以說rman只是起了協(xié)調(diào)作用,并不真正地干活。
RMAN的用戶權(quán)限
在oracle 11g中,rman是通過sys權(quán)限連入數(shù)據(jù)庫的
因?yàn)閞man需要訪問目標(biāo)數(shù)據(jù)庫上sys用戶,還需要有啟動(dòng)和關(guān)閉數(shù)據(jù)的權(quán)限。
但是,平時(shí)我們直接在rman target /連接時(shí)候,就算rman不是sys權(quán)限也能連入,那是因?yàn)樗鷖qlplus / as sysdba一樣,是操作系統(tǒng)認(rèn)證。若是rman沒有sys權(quán)限,進(jìn)行遠(yuǎn)程連接,那么肯定會(huì)報(bào)權(quán)限不足的錯(cuò)誤。
在12c中,rman權(quán)限又發(fā)生了改變。
RMAN與控制文件
1.rman通過直接讀取控制文件里面的信息
2.控制文件里面記錄了rman的備份信息
控制文件分為兩部分:
不可變部分
可變部分記錄的是數(shù)據(jù)文件,日志文件的路徑,文件名,表空間信息,數(shù)據(jù)庫名等等。這部分的數(shù)據(jù)是不會(huì)被覆蓋掉的。
RMAN就是通過讀取該部分信息,方便自己對(duì)數(shù)據(jù)庫進(jìn)行備份恢復(fù)。
可變部分
當(dāng)我們的RMAN是nocatalog方式的話,RMAN所備份的信息(包括備份的記錄,備份開始和結(jié)束時(shí)間的檢查點(diǎn))就是記錄在這一部分之內(nèi),當(dāng)然這一部分還記錄了很多其他信息。但是當(dāng)這部分的信息滿了,外部還需要往這部分里面寫入數(shù)據(jù),那么就需要覆蓋這里面的信息,包括RMAN的備份信息。這時(shí)為了我們的備份信息不被覆蓋,就需要設(shè)置下面的參數(shù):
controlfile_record_keep_time:該參數(shù)是指定RMAN的備份信息在控制文件中多少天不被覆蓋。
show parameter control
SQL> show parameter control _file_record_keep_time
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
Oracle默認(rèn)是為7天,但具體應(yīng)該設(shè)置為多少天,應(yīng)該根據(jù)我們生產(chǎn)過程中備份計(jì)劃來定。
快照控制文件
RMAN在備份的時(shí)候需要讀一個(gè)一致性的控制文件,但是控制文件是一個(gè)IO比較頻繁的文件,在備份過程中難免發(fā)生修改,若是我們?cè)趥浞葸^程中鎖定了控制文件已達(dá)到這種目的,那就悲劇啦。數(shù)據(jù)庫的很多業(yè)務(wù)都會(huì)無法正常運(yùn)行。
因此,Oracle通過快照控制文件來解決這個(gè)問題。
當(dāng)我們用RMAN執(zhí)行備份的時(shí)候,在$ORACLE/dbs下會(huì)產(chǎn)生一個(gè)快照控制文件。
[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:25snapcf_orcl.f
-rw-r----- 1 oracle oinstall 2560 Jan 13 23:18 spfileorcl.ora
如上,snapcf_orcl.f便是快照控制文件,RMAN通過讀取該文件里信息來代替真的控制文件里的內(nèi)容。有效地解決該問題。、
RMAN服務(wù)器進(jìn)程
rman連接到目標(biāo)庫的客戶端時(shí)會(huì)創(chuàng)建兩個(gè)服務(wù)器進(jìn)程:
主要進(jìn)程:生成對(duì)sys包的調(diào)用,從而執(zhí)行備份和恢復(fù)操作,并協(xié)調(diào)工作。
成都創(chuàng)新互聯(lián)公司總部坐落于成都市區(qū),致力網(wǎng)站建設(shè)服務(wù)有網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營銷策劃、網(wǎng)頁設(shè)計(jì)、網(wǎng)站維護(hù)、公眾號(hào)搭建、成都微信小程序、軟件開發(fā)等為企業(yè)提供一整套的信息化建設(shè)解決方案。創(chuàng)造真正意義上的網(wǎng)站建設(shè),為互聯(lián)網(wǎng)品牌在互動(dòng)行銷領(lǐng)域創(chuàng)造價(jià)值而不懈努力!
次要進(jìn)程:輪詢r(jià)man的長事務(wù)并在內(nèi)部記錄信息。
RMAN所調(diào)用的兩個(gè)數(shù)據(jù)包
RMAN通道服務(wù)進(jìn)程在協(xié)調(diào)工作時(shí)要訪問兩個(gè)sys數(shù)據(jù)包BMS_RCVMAN和DBMS_BACKUP_RESTORE,這倆包包含rman在目標(biāo)庫操作的所有功能。
這兩個(gè)包是在創(chuàng)建數(shù)據(jù)庫時(shí),運(yùn)行cataproc.sql腳本安裝的,它們是被硬編碼到Oracle軟件的庫文件中的,所以即使沒有打開數(shù)據(jù)庫也能調(diào)用這些數(shù)據(jù)包。
SYS.DBMS_RCVMAN用來訪問控制文件并校驗(yàn)所必須的信息,并將此信息傳遞給rman服務(wù)進(jìn)程,rman服務(wù)進(jìn)程會(huì)基于recover.bsq文件中的代碼創(chuàng)建pl/sql塊。這些pl/sql塊會(huì)調(diào)用SYS.DBMS_BACKUP_RESTORE,進(jìn)行數(shù)據(jù)文件,控制文件的和歸檔的redo log的備份。備份集完成后,SYS.DBMS_BACKUP_RESTORE會(huì)往控制文件中記錄備份信息。
RMAN備份過程
備份開始后,建立一個(gè)通道進(jìn)程(應(yīng)為現(xiàn)在使用的是默認(rèn)設(shè)置),因?yàn)闆]有使用i/o從屬,通道程序會(huì)在pga中分配。rman主要進(jìn)程通過編譯一個(gè)DBMS_RCVMAN調(diào)用,從目標(biāo)庫控制文件解析出數(shù)據(jù)庫結(jié)構(gòu)信息(確定目標(biāo)庫版本和控制文件信息(類型,當(dāng)前序列號(hào),創(chuàng)建時(shí)間))。編譯文件列表后,之后RMAN便會(huì)創(chuàng)建快照控制文件,rman創(chuàng)建對(duì)DBMS_BACKUP_RESTORE的調(diào)用,并根據(jù)數(shù)據(jù)文件數(shù)分配輸入和輸出緩沖區(qū)(分配內(nèi)存)。分配了內(nèi)存后,rman初始化備份片,備份片得到了一個(gè)唯一的默認(rèn)名字。當(dāng)備份片初始化完成,通道進(jìn)程開始數(shù)據(jù)庫備份。rman會(huì)判斷是需不需要對(duì)參數(shù)文件和控制文件進(jìn)行備份。之后,rman創(chuàng)建對(duì)DBMS_BACKUP_RESTORE的調(diào)用,并根據(jù)數(shù)據(jù)文件數(shù)分配輸入和輸出緩沖區(qū)(分配內(nèi)存)。分配了內(nèi)存后,rman初始化備份片,備份片得到了一個(gè)唯一的默認(rèn)名字。完成控文件制和spfile的備份,通道進(jìn)程開始讀取數(shù)據(jù)文件并將數(shù)據(jù)塊輸入緩沖區(qū)到輸出緩沖區(qū)的內(nèi)存對(duì)內(nèi)存的寫操作。在這個(gè)寫操作期間,任滿會(huì)判斷塊是否被初始化或數(shù)據(jù)塊頭信息是否為零。如果塊用過(塊頭信息不為0,若是塊頭信息為0,該塊可以丟棄不寫,這也是RMAN的優(yōu)點(diǎn)之一),rman會(huì)在這個(gè)塊上執(zhí)行效驗(yàn)操作。如塊頭和腳注不匹配,rman會(huì)指出存在訛誤的數(shù)據(jù)塊并終止備份。如通過數(shù)據(jù)塊被推入輸出緩沖區(qū)。 一般輸出緩沖區(qū)填滿,就會(huì)把輸出緩沖區(qū)的內(nèi)容轉(zhuǎn)存到備份文件位置。當(dāng)所有文件通過內(nèi)存緩沖區(qū)過濾,就完成備份片,同時(shí)RMAN會(huì)在目標(biāo)數(shù)據(jù)庫的控制文件中寫入備份信息。
注:以上部分內(nèi)容來源于網(wǎng)絡(luò)。
文章題目:RMAN的備份原理
當(dāng)前URL:
http://weahome.cn/article/gcgceo.html