Oracle例項恢復

fengpinDBA發表於2013-12-03

例項恢復

Oracle例項在非正常關閉或執行SHUTDOWN ABORT強制關閉後,例項在下次開啟資料庫之前會執行例項恢復過程,這個過程是由Oracle自動完成的。執行例項恢復的目的是確保資料的一致性,只有當聯機Redo日誌檔案和UNDO表空間的介質沒有被破壞才能確保例項恢復能夠成功。

1.        RAC的例項恢復

當軟體、硬體或者人為問題導致例項失敗之後,Oracle資料庫自動使用聯機Redo日誌和UNDO資料執行例項恢復操作。

Crash恢復與例項恢復的區別:

l   一個單例項資料庫或者RAC資料庫所有例項失敗之後,第一個開啟資料庫的例項會自動執行例項恢復。這種形式的例項恢復稱為Crash恢復。

l   一個RAC資料庫的一部分但不是所有例項失敗後,在RAC中倖存的例項自動執行失敗例項的恢復稱為例項恢復。

根據Crash恢復和例項恢復的不同,由倖存例項或者第一個重啟的例項讀取失敗例項生成的聯機Redo日誌和UNDO表空間資料,使用這些資訊確保只有已提交的事務被寫到資料庫中,回滾在失敗時候活動的事務,並釋放事務使用的資源。

2.        例項恢復的階段

在例項發生異常終止的情況下,資料庫處於以下的狀態:

l   事務提交的資料塊只寫入聯機Redo日誌中,沒有更新到資料檔案(那麼未寫入資料檔案的更新必須重新寫入資料檔案)。

l   由於DBWR程式是非同步向磁碟寫入資料的,資料檔案中可能包含沒有被提交但已經寫入資料檔案的改變,這些改變必須回滾到之前的狀態,以確保資料的一致性。

例項恢復利用聯機Redo日誌檔案解決第一個問題,利用UNDO資料同步資料檔案解決第二個問題,從而確保資料庫資料的一致性。

因此,例項恢復過程會經歷兩個階段:

u  例項恢復的第一個階段稱為Cache恢復或者前滾,確保聯機Redo日誌中所有已提交的事務操作的資料寫回到資料檔案中。如果正在執行的檢查點還未完全執行完畢時發生例項失敗,前滾過程可能需要通過多個聯機Redo日誌檔案才能使資料恢復到之前時間的狀態。前滾之後,資料中就包含了連線Redo日誌檔案中所有已提交的資料。在失敗之前,資料檔案中可能也包含未提交的改變,或者是記錄在聯機Redo日誌中但未提交的資料,在前滾的時候被寫到硬碟中。

u  例項恢復的第二個階段稱為回滾或者事務恢復,Oracle資料庫應用UNDO塊回滾在資料塊中未提交的改變,這些資料塊是在失敗之前或者Cache恢復期間被寫入的。回滾完成之後,整個例項恢復才算完成,而RedoUNDO的丟失或者損壞都可能導致例項恢復失敗。Oracle資料庫能同時回滾多個事務。所有在失敗的時候是活動的事務都被打上了終止的標記,等待SMON程式回滾終止的事務。

            資料庫由SMON後臺程式自動應用聯機Redo日誌檔案中的條目和讀取UNDO表空間中的資料完成例項恢復。

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

相關文章