SQL Server 中備份的還原和恢復工作方式

iSQlServer發表於2009-01-19

“還原”是指從備份複製資料並將記錄的事務應用於該資料以使其前滾到目標恢復點的過程。資料備份或差異備份包含的事務日誌記錄足以允許前滾活動的事務作為還原每個備份的一部分。每個備份還包含足以回滾未提交的事務的日誌,以使資料庫進入事務一致的可用狀態。前滾未提交的事務(如果有)並使資料庫處於聯機狀態的過程稱為“恢復”。

 前滾集
將日誌記錄更改應用到資料庫以使資料及時前滾的過程稱為“前滾”。包含所有還原資料的集合稱為“前滾集”。前滾集定義為包括一個或多個完整備份(例如資料庫備份、部分備份或一組檔案備份)的還原操作。如果 RESTORE 語句指定了檔案組、檔案或頁,則前滾集中將僅包括這些項。否則,備份中所有正被還原的檔案都將包括在前滾集中。如果完整備份包含日誌記錄,則還原的資料將使用此日誌前滾。

注意:
如果在還原期間指定了檔案組,則還原將包含當前存在的整個檔案組。其中包括備份後新增到檔案組的所有檔案。有關詳細資訊,請參閱控制在前滾過程中是否建立新增的檔案。
 


對於差異備份,如果自建立差異基準後,將任何檔案新增到了資料庫,則還原差異備份可能會用差異備份中的資料覆蓋前滾集中的頁。有關詳細資訊,請參閱使用差異備份。

還原差異備份僅在下列情況下才會更新頁:前滾集中包含頁,備份中包含頁,RESTORE 語句可以列出頁或其檔案,或者 RESTORE 語句不列出任何檔案或頁。

在完整恢復模式和大容量日誌恢復模式下,必須單獨備份日誌。還原資料和(可選)差異備份後,通常會還原後續日誌備份以將資料庫恢復到故障點。還原日誌備份將對前滾集中的所有頁進行前滾。有關日誌備份的詳細資訊,請參閱使用事務日誌備份。

 還原順序
還原方案使用一個或多個還原步驟(操作)來實現,這稱為“還原順序”。每個操作與不同的 Transact-SQL RESTORE 語句對應。還原順序將受影響的資料在一個或多個還原階段中移動。

有關 Transact-SQL 還原順序以及如何對其進行構造的詳細資訊,請參閱使用 SQL Server 資料庫還原順序。

 還原階段
還原是一個多階段過程。還原可能涉及的階段包括資料複製、重做(前滾)以及撤消(回滾)階段:

資料複製階段涉及從資料庫的備份媒體將所有資料、日誌和索引頁複製到資料庫檔案中。

重做階段將記錄的事務應用到從備份複製的資料,以將這些資料前滾到恢復點。在此點,資料庫通常有未提交的事務,並處於不可用的狀態。在這種情況下,恢復資料庫操作就包括撤消階段。

撤消階段(恢復的第一部分)將回滾任何未提交的事務並使資料庫可供使用者使用。回滾階段後將無法還原後續的備份。

本節其餘部分將詳細介紹這些階段。

資料複製階段
還原過程的第一個階段為“資料複製階段”。在資料複製階段,將對要還原的資料庫、檔案或頁中的內容進行初始化。此階段執行的操作包括使用完整備份或差異備份來還原資料庫、檔案和頁。

資料複製階段涉及從一個或多個完整備份和(可選)差異備份複製資料,然後將受影響的資料庫、檔案或頁中的內容重置到被備份捕獲的時間。

前滾集中最早的檔案或頁將決定下一階段(重做,即前滾)的起點。

重做階段(前滾)
“重做”(即“前滾”)是指重做對前滾集中的資料記錄的更改以使資料及時前滾的過程。為了完成前滾,SQL Server 資料庫引擎按照還原日誌備份的方式並從完整備份中的日誌開始處理日誌備份。

還原能夠避免不必要的前滾。通常,如果資料在備份時為只讀並且現在仍為只讀,則沒有必要前滾並將跳過。

恢復點
回滾的目的是將資料返回至其在恢復點的原始狀態。“恢復點”是使用者指定將資料集恢復到的點。在完整恢復模式下,可以將恢復點指定為特定時間點、標記的事務或日誌序列號。在大容量日誌恢復模式下,僅當上次日誌備份以來尚未執行大容量操作時,才可還原到某個時間點。

重做一致性
在重做階段,始終將資料前滾到與資料庫在恢復點的狀態保持“重做一致性”的點。所有資料都已前滾至可執行撤消的點。

資料庫狀態由主檔案定義,如下所示:

如果正在還原主檔案,則恢復點將確定整個資料庫的狀態。例如,如果正在將資料庫恢復到剛好在意外刪除表之前的時點,則必須將整個資料庫還原到同一時點。

如果不還原主檔案,則資料庫狀態已知,並且還原的資料前滾到與資料庫事務一致的恢復點。SQL Server 強制實施這一點。

但是,資料庫可能包含在恢復點處未提交的事務所做的更改。對於聯機還原,資料將恢復到與資料庫聯機部分的當前狀態一致的時點。

差異備份將向前跳到進行差異備份的時間點。前滾集中的頁將由差異備份中較新的頁覆蓋。

 撤消(回滾)階段和恢復
在重做階段已前滾所有日誌事務後,資料庫中通常包含在恢復點處未提交的事務所做的更改。這會導致前滾資料在事務上不一致。恢復過程通過開啟事務日誌來標識未提交的事務。通過回滾未提交的事務以將它們撤消,除非它們持有防止其他事務檢視事務上不一致資料的鎖。此步驟稱為“撤消”(或“回滾”)階段。如果資料在恢復過程開始時在事務方面已經是一致的,則將跳過撤消階段。在使資料庫事務一致後,恢復操作使資料庫聯機。

在一個或多個備份已還原後,恢復通常會包含重做和撤消兩個階段。每個完整備份和差異備份都包含足夠的事務日誌記錄,以便將該備份中的資料恢復到自我一致的狀態。

注意:
在崩潰恢復或資料庫映象故障轉移期間,SQL Server 2005 Enterprise Edition 及更高版本允許使用者在撤消階段訪問資料庫。這稱為“快速恢復”。快速恢復是可能的,因為崩潰發生時未提交的事務重新獲得它們在崩潰前所持有的所有鎖。回滾這些事務時,事務的鎖可以保護它們免受使用者的干擾。
 


 RECOVERY 和 NORECOVERY 選項與還原階段的關係
根據特定 RESTORE 語句是否指定了 WITH NORECOVERY,該語句會在重做階段之後結束或繼續完成撤消階段,如下所示:

WITH RECOVERY 包含重做和撤消兩個階段,並可以恢復資料庫;不能還原其他備份。這是預設設定。
如果前滾集前滾得不夠遠,無法與資料庫一致,則不會出現撤消階段。資料庫引擎將發出錯誤,恢復將停止。
如果整個前滾集與資料庫一致,則執行恢復,並且可使資料庫聯機。

WITH NORECOVERY 省略撤消階段以保留未提交的事務。省略撤消階段允許還原其他備份以將資料庫進一步前滾。有時,RESTORE WITH NORECOVERY 會將資料前滾到其與資料庫一致的位置。在這種情況下,資料庫引擎將發出資訊性訊息,宣告現在可以使用 RECOVERY 選項恢復前滾集。
有關前滾集的資訊,請參閱瞭解 SQL Server 中備份的還原和恢復工作方式。

注意:
第三種方法 WITH STANDBY 不在本主題的範圍內。
 


有關這些 RESTORE 選項的深入說明,請參閱 RESTORE (Transact-SQL)。

 恢復路徑
“恢復路徑”是指一組唯一的轉換操作,在資料庫不斷變化的同時使資料庫保持一致。有關恢復路徑和恢復分叉、恢復分支的相關概念的資訊,請參閱恢復路徑。

 

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

相關文章