Oracle裡邏輯備份、物理備份、Rman備份的區別

quanjima發表於2014-10-21


Oracle資料庫的邏輯備份ORACLE資料庫有兩類備份方法。

第一類為物理備份,該方法實現資料庫的完整恢復,但資料庫必須執行在歸擋模式下(業務資料庫在非歸擋模式下執行),且需要極大的外部儲存裝置,例如磁帶庫;

第二類備份方式為邏輯備份,業務資料庫採用此種方式,此方法不需要資料庫執行在歸擋模式下,不但備份簡單,而且可以不需要外部儲存裝置。資料庫邏輯備份方法ORACLE資料庫的邏輯備份分為三種模式:表備份、使用者備份和完全備份。

表模式備份某個使用者模式下指定的物件(表)。業務資料庫通常採用這種備份方式。若備份到本地檔案,使用如下命令:

exp icdmain/icd rows=y indexes=n compress=n buffer=65536

feedback=100000 volsize=0

 file=exp_icdmain_csd_yyyymmdd.dmp

 log=exp_icdmain_csd_yyyymmdd.log

tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo

若直接備份到磁帶裝置,使用如下命令:

 exp icdmain/icd rows=y indexes=n compress=n buffer=65536

 feedback=100000 volsize=0

 file=/dev/rmt0

 log=exp_icdmain_csd_yyyymmdd.log

tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo

 注:在磁碟空間允許的情況下,應先備份到本地伺服器,然後再複製到磁帶。出於速度方面的考慮,儘量不要直接備份到磁帶裝置。

使用者模式 備份某個使用者模式下的所有物件。業務資料庫通常採用這種備份方式。 若備份到本地檔案,使用如下命令:

exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536

feedback=100000 volsize=0

file=exp_icdmain_yyyymmdd.dmp

 log=exp_icdmain_yyyymmdd.log

若直接備份到磁帶裝置,使用如下命令:

exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536

 feedback=100000 volsize=0

 file=/dev/rmt0

 log=exp_icdmain_yyyymmdd.log

注:如果磁碟有空間,建議備份到磁碟,然後再複製到磁帶。如果資料庫資料量較小,可採用這種辦法備份。

 完全模式備份完整的資料庫。業務資料庫不採用這種備份方式。備份命令為:

exp icdmain/icd rows=y indexes=n compress=n buffer=65536

 feedback=100000 volsize=0 full=y

file=exp_fulldb_yyyymmdd.dmp(磁帶裝置則為/dev/rmt0)

log=exp_fulldb_yyyymmdd.log 對於資料庫備份,建議採用增量備份,即只備份上一次備份以來更改的資料。增量備份命令:

exp icdmain/icd rows=y indexes=n compress=n buffer=65536

 feedback=100000 volsize=0 full=y inctype=incremental

file=exp_fulldb_yyyymmdd.dmp(磁帶裝置則為/dev/rmt0)

log=exp_fulldb_yyyymmdd.log

注:關於增量備份必須滿足下列條件:

 1. 只對完整資料庫備份有效,且第一次需要full=y引數,以後需要inctype=incremental引數。

 2. 使用者必須有EXP_FULL_DATABASE的系統角色。

3. 話務量較小時方可採用資料庫備份。

 4. 如果磁碟有空間,建議備份到磁碟,然後再備份到磁帶。

業務資料庫備份方法及週期用EXP進行備份前,先在SYS使用者下執行CATEXP.SQL檔案(如果以前已執行該檔案,則不要執行這個指令碼)。

 沒有特殊說明,不允許在客戶端執行備份命令。 備份命令參照表模式下的備份命令。

RMAN備份原理在之前,看了使用者管理的備份恢復管理,透過以SCN為線索貫穿整個過程,來熟悉了備份原理。RMAN的備份過程和使用者備份恢復管理有很大的區別,很多朋友了都沒有理清楚原理下面的是我的理解:

RMAN備份資料塊的工作原理:

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

       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功能太強大了)

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

相關文章