資料庫映象會話期間的自動頁修復

iSQlServer發表於2008-11-17

在 SQL Server 2008 Enterprise 或更高版本上執行的資料庫映象夥伴會自動嘗試解決阻止讀取資料頁的特定型別的錯誤。 無法讀取頁的夥伴會從其他夥伴請求新副本。 如果此請求成功,則將以新副本替換不可讀的頁,這通常會解決該錯誤。

注意:
資料庫映象夥伴進行的自動頁修復不同於 DBCC 修復。 自動頁修復會保留所有資料。 相反,使用 DBCC REPAIR_ALLOW_DATA_LOSS 選項更正錯誤可能需要刪除某些頁(從而會刪除資料)。
 


 導致自動頁修復嘗試的錯誤型別
資料庫映象自動頁修復只嘗試修復特定資料檔案中的頁,此資料檔案是指對其執行的操作由於下表中列出的某一錯誤而失敗的資料檔案。

錯誤號  說明  導致自動頁修復嘗試的例項 
823
 僅當作業系統對資料執行迴圈冗餘檢查 (CRC) 失敗時才執行此操作。
 ERROR_CRC。 此錯誤的作業系統值為 23。
 
824
 邏輯錯誤。
 邏輯資料錯誤,例如殘缺寫或錯誤的頁校驗和。
 
829
 頁已標記為還原已掛起。
 全部。
 

若要檢視最近的 823 CRC 錯誤和 824 錯誤,請參閱 msdb 資料庫中的 suspect_pages 表。

 無法自動修復的頁型別
以下控制頁型別無法通過資料庫映象修復:

檔案頭頁(頁 ID 0)。

頁 9(資料庫啟動頁)。

分配頁:全域性分配對映 (GAM) 頁、共享全域性分配對映 (SGAM) 頁和頁可用空間 (PFS) 頁。

 處理主體資料庫中的 I/O 錯誤
在主體資料庫中,僅當節點處於 SYNCHRONIZED 狀態且主體伺服器仍向映象伺服器傳送日誌記錄時,才會嘗試自動頁修復。 自動頁修復嘗試中操作的基本順序如下:

當主體資料庫中的資料頁上發生讀取錯誤時,主體伺服器將使用相應的錯誤狀態在 suspect_pages 表中插入一行。 然後,主體伺服器從映象伺服器請求此頁的副本。 此請求指定當前在重新整理日誌末尾的頁 ID 和 LSN。 此頁將標記為“還原已掛起”。 這將使它在自動頁修復嘗試期間不可訪問。 修復嘗試期間對此頁的訪問嘗試將失敗,並顯示錯誤 829(還原已掛起)。

收到頁請求後,映象伺服器將等待,直到將日誌重做到請求中指定的 LSN 處。 然後,映象伺服器將嘗試訪問映象資料庫中的此頁。 如果可以訪問此頁,則映象伺服器將此頁的副本傳送到主體伺服器。 否則,映象伺服器將向主體伺服器返回錯誤,並且自動頁修復嘗試失敗。

主體伺服器處理包含此頁新副本的響應。

自動頁修復嘗試修復可疑頁後,此頁將在 suspect_pages 表中標記為已還原 (event_type = 4)。

如果此頁 I/O 錯誤導致出現任何延遲的事務,則修復此頁後,主體伺服器將嘗試解決這些事務。

 處理映象資料庫中的 I/O 錯誤
將用以下方式處理在映象資料庫中發生的資料頁 I/O 錯誤。

如果映象伺服器在其重做日誌記錄時遇到一個或多個頁 I/O 錯誤,則映象會話將進入 SUSPENDED 狀態。 此時,映象伺服器使用相應的錯誤狀態在 suspect_pages 表中插入一行。 然後,映象伺服器從主體伺服器請求此頁的副本。

主體伺服器嘗試訪問主體資料庫中的此頁。 如果可以訪問此頁,則主體伺服器將此頁的副本傳送到映象伺服器。

如果映象伺服器收到它請求的每一頁的副本,則映象伺服器將嘗試恢復映象會話。 如果自動頁修復嘗試修復了可疑頁,此頁將在 suspect_pages 表中標記為已還原 (event_type = 4)。
如果映象伺服器未從主體伺服器收到它請求的頁,則自動頁修復嘗試將失敗並且映象會話保持掛起。 如果手動恢復映象會話,則損壞的頁將在同步階段再次導致錯誤。

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

相關文章