轉自:http://blog.sina.com.cn/s/blog_63216bda0100zblr.html
Oracle文檔中提到,一旦用備份的控制文件進行數據庫恢復,就需要使用resetlogs的方法打開數據庫,但是resetlogs通常意味着不完全恢復,而且更重要的是一旦用resetlogs方法打開數據庫,日志的序號用重新從1開始。其實如果只是控制文件損壞,日志文件都完整的話,數據庫是可以完全恢復的,而且不必非得用resetlogs打開。接下來,我們就對不完全恢復做出總結,如圖9-10所示,然后再通過一些實驗深入理解。
![]() |
圖9-10 控制文件的重建方法及后續恢復操作 |
9.6.1 使用alter database open resetlogs的場合
使用resetlogs選項,會把當前的日志序號(log sequence number)重設為1,並拋棄所有日志信息。在以下條件時需要使用resetlogs選項:
在不完全恢復(介質恢復);
使用備份控制文件。
使用resetlogs打開數據庫后,務必要完整地進行一次數據庫備份。
指定RESETLOGS會執行下列操作:
歸檔當前的在線重做日志文件(如果能訪問到的話),然后清空內容並將日志文件序號重置為1(如果在線重做日志文件不存在,則重建)。
更新數據文件和在線重做日志文件中的RESETLOGS SCN和重置時間信息。
顧名思義,reset將重置日志順序號,那么以前數據庫的備份將不再可用
萬事萬物有果必有因,執行了不完全恢復操作,或者使用了備份的控制文件進行恢復,或者執行Flashback Database操作之后,在打開數據庫時必須指定RESETLOGS選項,這是由Oracle自身特性決定的。
正常運行中Oracle內部有一個生命周期,這種生命周期在Oracle中也有一個專業詞匯,叫incarnation。不完全恢復,顧名思義就是只恢復部分數據,由於已經無法將數據庫恢復到當前狀態(崩潰前的狀態),Oracle數據庫也不知道當前處於什么狀態了,事務上也許一致,但是不是最新,Oracle自己無從判斷,后續也許仍有重做日志文件,但卻無法應用(或DBA不允許應用)。如果沒有Incarnation的概念,正常Open數據庫的話又會產生重做日志文件,並且這些日志文件的序號與之前相同(但內容可能不同),這樣不管是備份還是恢復都會造成混淆,因此必須在執行不完全恢復后,標示之前生命周期結束,方法就是以RESETLOGS方式打開數據庫。以RESETLOGS方式打開后,Oracle數據庫又開始了一個新的生命周期,即重置Incarnation,日志文件序號也被重新初始化到1。
圖7-4顯示了一次OPEN RESETLOGS的操作。如果我們畫一個時間軸的話,不完全恢復就是將數據庫恢復到從備份時間到當前時間之間的某一個點。
數據庫在日志文件序號為1000時創建了備份,在日志文件序號為4000時崩潰,由於日志文件序號為2501,因此你只能將數據庫恢復到日志文件序號為2500時的狀態,然后以RESETLOGS方式打開,Oracle數據庫又開始了一個新的Incarnation,日志文件序號被重新初始化到1,然后隨着數據庫的運行不斷增加並達到4000,但這些日志文件與之前的日志文件並不關聯(雖然文件序號相同)。
![]() |
指定RESETLOGS會執行下列操作:
歸檔當前的在線重做日志文件(如果能訪問到的話),然后清空內容並將日志文件序號重置為1(如果在線重做日志文件不存在,則重建)。
重置控制文件中關於在線日志文件的元數據。
更新數據文件和在線重做日志文件中的RESETLOGS SCN和重置時間信息。
在10g之前的版本,數據庫執行完OPEN RESETLOGS操作之后,都建議立刻進行一次完全備份,因為之前版本中在執行OPEN RESETLOGS操作時並不對當前的Online Redologs文件進行歸檔,這會導致歸檔文件不再連續,因此之前創建的備份不再有效(恢復不到當前狀態了,只能恢復到OPEN RESETLOGS操作之前)。10g及之后版本就不存在這個問題了,OPEN RESETLOGS操作會首先將當前在線重做日志文件歸檔(如果能夠訪問到的話),並且OPEN RESETLOGS操作也會記入Online Redologs文件並正常歸檔,相當於OPEN RESETLOGS只是一個命令操作,就像其他SQL命令一樣,這樣保證了歸檔日志文件的連續性,之前的備份依然有效,不過三思仍然建議執行OPEN RESETLOGS操作之后馬上進行一次全庫備份。
提示
什么是Incarnation?
Oracle數據庫的Incarnation在有些資料中譯作對應物,在我看來可以將其理解成生命周期。Oracle數據庫從創建到遇到RESETLOGS操作為一個生命周期,這個生命周期內數據庫的邏輯屬性,如SCN、日志文件序列號等具有相同的特征。當通過OPEN RESETLOGS方式打開數據庫后,原生命周期即宣告結束,原生命周期中生成的重做日志文件也被廢棄,日志文件序號自動重置為1。