資料庫啟動時,涉及到的不一致情況的分析:介質恢復,例項恢復和resetlogs

物理狂人發表於2011-12-01
資料庫啟動時會先判斷是否需要進行介質恢復->resetlogs->例項恢復的過程。
1)介質恢復是根據控制檔案中的資料檔案資訊和資料檔案本身的頭資訊進行比較,從而確實是否需要進行介質恢復
2)resetlogs是根據控制檔案中日誌檔案資訊、日誌檔案本身的頭資訊、資料檔案頭資訊(或控制檔案中資料檔案資訊此時介質恢復已經完成,資料檔案和控制檔案一致)進行比較,從而確定是否需要進行resetlogs的操作
3)例項恢復則是在不需要resetlogs的情況下,根據控制檔案中資料檔案stop scn是否為null,從而確定是否需要進行例項恢復
備份知識的說明:
recover database,從舊的資料檔案恢復到控制檔案中資料檔案的scn位置
recover database using backup control,恢復到最新的log scn位置
完全恢復:所以檔案保持一致
不完全恢復:只要有一個檔案不一致
注意,對於資料檔案頭、控制檔案中資料檔案頭資訊與日誌檔案頭一致,但控制檔案中日誌檔案頭資訊不與之前三者一致也是不完全恢復,雖然資料沒有丟失

這裡我們定義一下最新控制檔案的概念:1)所有檔案全部一致,或2)資料檔案一致(除stop scn),日誌檔案一致
“()”內資料為一致資料


以下對各種啟動情況進行分析:
1)正常關機
此時控制檔案中的資料檔案頭資訊、控制檔案中的資料檔案頭stop scn、資料檔案頭、控制檔案中的日誌檔案頭資訊、日誌檔案頭資訊全部一致,此時可以正常開啟資料庫

2)異常關機
控制檔案中的資料檔案頭資訊與、資料檔案頭一致,所以不需要介質恢復,資料檔案和控制檔案一致
此時控制檔案是最新的,即控制檔案中的日誌檔案頭資訊、日誌檔案頭資訊一致
(控制檔案中資料檔案頭資訊、資料檔案頭資訊)(控制檔案中的日誌檔案頭資訊、日誌檔案頭資訊)不一致,但此時stop scn=null, 所以不需要resetlogs,最新的控制檔案。
控制檔案中的資料檔案頭stop scn為null,所以需要進行例項恢復,說明資料檔案和日誌檔案不一致

3)舊的資料檔案,最新的控制檔案
控制檔案中的資料檔案頭資訊與、資料檔案頭不一致,所以需要介質恢復,資料檔案和控制檔案不一致
如果:
 (1)recover database恢復到當前控制檔案中資料檔案頭資訊的位置(完全恢復)
如果:
(1)
(控制檔案中資料檔案頭資訊、資料檔案頭資訊)(控制檔案中的日誌檔案頭資訊、日誌檔案頭資訊)一致,所以不需要resetlogs。
控制檔案中的資料檔案頭stop scn不為null,不需要進行例項恢復,資料檔案和日誌檔案一致
(2)
(控制檔案中資料檔案頭資訊、資料檔案頭資訊)(控制檔案中的日誌檔案頭資訊、日誌檔案頭資訊)不一致,但stop scn為null
控制檔案中的資料檔案頭stop scn為null,需要進行例項恢復,資料檔案和日誌檔案不一致

 (2)recover database until ***恢復到之前的某個點(不完全恢復)
(控制檔案中資料檔案頭資訊、資料檔案頭資訊)(控制檔案中的日誌檔案頭資訊、日誌檔案頭資訊)不一致,且stop scn非null,所以需要resetlogs。同時將stop scn重置為null

4)舊的資料檔案,不是最新的控制檔案
控制檔案中的資料檔案頭資訊與、資料檔案頭不一致,所以需要介質恢復,資料檔案和控制檔案不一致
如果:
 (1)recover database恢復到當前控制檔案中資料檔案頭資訊的位置(不完全恢復)
控制檔案中的日誌檔案頭資訊、日誌檔案頭資訊不一致,所以需要resetlogs。同時將stop scn重置為null
 (2)recover database using backup controlfile恢復到當前日誌檔案的最大scn(不完全恢復)
(控制檔案中資料檔案頭資訊、資料檔案頭資訊、日誌檔案頭資訊)與 控制檔案中的日誌檔案頭資訊 不一致所以需要resetlogs。同時將stop scn重置為null。
注意:在恢復過程中,控制檔案中的日誌檔案資訊並不會雖然恢復而進行推進

5)舊的或備份的控制檔案,較新的資料檔案
控制檔案中的資料檔案頭資訊與、資料檔案頭不一致,所以需要介質恢復,資料檔案和控制檔案不一致
recover database using backup controlfile恢復到當前日誌檔案的最大scn(不完全恢復)
(控制檔案中資料檔案頭資訊、資料檔案頭資訊、日誌檔案頭資訊)與 控制檔案中的日誌檔案頭資訊 不一致所以需要resetlogs。同時將stop scn重置為null。

6)重建控制檔案resetlogs
此時控制檔案中的資料檔案頭資訊scn從當前資料檔案頭scn中獲取,而控制檔案中的日誌檔案頭資訊全零,與日誌檔案不一致,所以可以理解為是舊的控制檔案
(1)(控制檔案中資料檔案頭資訊、資料檔案頭資訊、日誌文頭資訊)一致,可以不用介質恢復
 日誌檔案頭和控制檔案中日誌檔案頭資訊不一致,所有需要resetlogs(丟失聯機日誌資料)

      (2)也可以用recover database using controlfile 恢復到當前最近日誌的scn位置
日誌檔案頭和控制檔案中日誌檔案頭資訊不一致,所有需要resetlogs(如果聯機日誌完好,資料不會丟失)

7)重建控制檔案noresetlogs
此時控制檔案中的資料檔案頭資訊scn從當前日誌頭scn中獲取current log scn,控制檔案全部scn都設定為最新,包括日誌部分。
(1)如果此時資料檔案過舊,則需要介質恢復recover database,此時所有檔案一致,不需要resetlogs
(2)如果資料檔案已經一致,則可以直接 alter database open。

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

相關文章