使用resetlogs選項,會把當前的日志序號(log sequence number)重設為1,并拋棄所有日志信息。在以下條件時需要使用resetlogs選項:
在不完全恢復(介質恢復);
使用備份控制文件。
使用resetlogs打開數據庫后,務必要完整地進行一次數據庫備
指定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操作之后馬上進行一次全庫備份。
?
正常運行中Oracle內部有一個生命周期,這種生命周期在Oracle中也有一個專業詞匯,叫incarnation。不完全恢復,顧名思義就是只恢復部分數據,由于已經無法將數據庫恢復到當前狀態(崩潰前的狀態),Oracle數據庫也不知道當前處于什么狀態了,事務上也許一致,但是不是最新,Oracle自己無從判斷,后續也許仍有重做日志文件,但卻無法應用(或DBA不允許應用)。如果沒有Incarnation的概念,正常Open數據庫的話又會產生重做日志文件,并且這些日志文件的序號與之前相同(但內容可能不同),這樣不管是備份還是恢復都會造成混淆,因此必須在執行不完全恢復后,標示之前生命周期結束,方法就是以RESETLOGS方式打開數據庫。以RESETLOGS方式打開后,Oracle數據庫又開始了一個新的生命周期,即重置Incarnation,日志文件序號也被重新初始化到1
?
Oracle數據庫從創建到遇到RESETLOGS操作為一個生命周期,這個生命周期內數據庫的邏輯屬性,如SCN、日志文件序列號等具有相同的特征。當通過OPEN RESETLOGS方式打開數據庫后,原生命周期即宣告結束,原生命周期中生成的重做日志文件也被廢棄,日志文件序號自動重置為1。