使用鏡像或可用性組作為熱備,當檢測到錯誤時,可以自動修復頁面(鏡像要求2008以上,可用性組是2012的函數)。Mirror當主體服務器遇到824錯誤時,它會向鏡像服務器發送請求,將損壞的頁面從鏡像復制到主體以解決問題。對於可用性組,如果在主復制副本上找到數據頁面,主復制副本將向所有輔助復制副本發送廣播,第壹個響應的輔助復制副本的頁面將修復頁面錯誤。如果錯誤發生在只讀輔助副本中,它將從主副本請求相應的頁面來修復錯誤。值得註意的是,無論哪種高可用技術,頁面錯誤都不會蔓延到冗余數據,因為SQL Server中所有的高可用技術都是基於日誌,而不是數據頁面。
其次,使用溫待機或者冷待機來恢復頁面。我已經在代碼清單1中給出了詳細的代碼,這裏就不細說了。
如果沒有合適的備份,如果損壞的數據頁存在於非聚集索引上,那麽您是幸運的,您只需要禁用索引並重建它。
如果有基準的完全備份,並且日誌鏈沒有斷(包括差異備份可以覆蓋缺失日誌的部分),可以在備份結束後通過恢復數據庫來修復。
最後,如果基礎工作沒有做好,可能需要通過丟失數據來改變數據庫的壹致性。我們可以通過DBCC CheckDB命令的REPAIR_ALLOW_DATA_LOSS來修復數據庫。使用這種方法可能會也可能不會導致數據丟失,但在大多數情況下,壹致性將通過刪除數據來修復。使用REPAIR_ALLOW_DATA_LOSS需要將數據庫設置為單用戶模式,這意味著停機。
在任何情況下,修復數據庫時都要考慮是否能滿足SLA。如果出現問題,發現無論如何都達不到SLA,那就只能回顧之前的準備,祈禱自己不會失業。