整理自《OCP/OCA認證考試指南》
001
執行個體恢複不僅可以重新構成在崩潰時未被儲存至資料檔案的任何已送出事務,而且可以復原已被寫至資料檔案的任何未送出事務。<b>這種恢複是完全自動的,我們無法随意停止執行個體恢複過程。如果執行個體恢複失敗,那麼唯一的可能是在執行個體失敗的同時還存在媒體失敗,此時隻有在使用媒體恢複技術還原和恢複受損檔案後才能打開資料庫。媒體恢複的最後一個步驟是自動的執行個體恢複。</b>
002 執行個體恢複機制
大體上,執行個體恢複隻不過是使用聯機日志檔案的内容将資料庫緩沖區緩存重新建構至崩潰之前的狀态。這個重構過程将重演從崩潰時未被寫至磁盤的資料塊的相關重做日志中提取出的所有變更。完成上述操作之後,就能夠打開資料庫。此時,資料庫仍然受到損壞,但是由于使用者看到的<b>執行個體</b>已被修複,是以允許使用者進行連接配接。執行個體恢複的這個階段稱為前滾,該階段将恢複所有變更(也就是針對已送出和未送出事務的資料塊變更與撤銷塊變更)。每條重做記錄都具有重新構造一個變更所需的最少資訊:資料塊的位址以及新值。在前滾期間,會讀取每條重做記錄,相應的資料塊從資料檔案載入資料庫緩沖區緩存,并且應用相應的變更。随後,資料塊會被寫回磁盤。
向前復原結束後,崩潰看上去似乎從未發生過。不過此時資料庫中還存在未送出的事務,這些事務必須被復原,Oracle将在執行個體恢複的復原階段自動完成未送出事務的復原操作。然而,<b>上述操作則發生在資料庫已被打開且使用之後。</b>如果使用者在連接配接時遇到某些需要復原但是尚未復原的資料,那麼不存在任何問題。<b>由于前滾階段會填充保護未送出事務的撤銷段,是以伺服器能夠以正常的方式復原變更,進而實作讀一緻性。</b>
<b> </b>執行個體恢複是自動的、不可避免的,那麼怎樣才能調用執行個體恢複呢?答案是使用startup指令。首先,在資料庫過渡到加載模式時,SMON程序會讀取控制檔案。随後,在資料庫過渡到open模式時,SMON程序會檢視所有資料檔案和聯機重做日志檔案的檔案頭。此時,如果已經出現了執行個體失敗,由于檔案頭沒有全部同步,是以SMON程序會發現執行個體失敗,進而進入執行個體恢複程序,而資料庫隻能在前滾階段結束後才能被真正地打開。
提示:如果執行了startup指令,那麼絕對不會丢失任何資料。在發生任何崩潰之後,都應當執行startup指令并檢視崩潰的程度。這個指令可以解決所有問題。