RMAN的原理

jst143發表於2011-04-05

今天深入的研究了一下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備份開始之前的歸檔是沒有用的,可以刪除,但是不能在rman備份之前就刪除,因為rman有可能備份失敗,可以在rman備份成功之後刪除之。
        rman備份是一種物理的備份,它直接去讀取資料塊,因此rman是塊級別的備份。從備份的那個時間點開始rman將鎖定此刻的資料檔案資訊,也就是說只是備份資料檔案到此刻的資訊為之。
        但是rman並不鎖定資料檔案的使用,也就是說rman的備份,不是資料庫一致性狀態的備份,由於rman備份是塊級別的,它只備份控制檔案中已經存在的資料塊,同時資料庫還在執行之中,那麼就有可能會出現某些已經提交的操作,但是dbwn還沒有寫入資料檔案,或者已經被rman備份過的資料塊,又重新被修改,等等,
        這些資訊rman備份都不會記錄,也是rman無法記錄的。但是記錄這些資訊的是redo file,所以在rman完畢建議馬上執行日誌切換,然後備份歸檔日誌,因為在rman恢復過程中,rman本身備份的資料是不一致的,要靠這些已經歸檔的redo file資訊恢復和保持資料庫的一直狀態。

        當然備份的歸檔日誌中,可能包含有rman開始之前的歸檔,這些是沒用的,
        其實這些歸檔檔案中真正有用的是從rman備份開始到rman備份結束時刻系統產生的歸檔日誌。
        同時rman在恢復的時候,restore database完畢後,會依次利用歸檔日誌和聯機日誌進行完全恢復。此時利用的這些歸檔就是從rman備份開始到rman備份結束產生的歸檔日誌。
        因此備份歸檔日誌是很必要的,當然聯機日誌也是必須的,這些日誌保證了rman能夠完全的恢復資料庫。

基本上就是這個情況了,所以RAMN是絕對安全的,也是資料庫中首選的備份方式,堅決謝絕exp和imp,做什麼事情都要專業點。

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

相關文章