香港服務器在我們知道可能造成數據庫的損壞原因之后,接下來我們來看SQL Server是如何監測數據庫頁損壞的。
在SQL Server的數據庫級別,可以設置頁保護類型,一共有三個選項:None,CheckSum,Torn_Page_Detection,如圖1所示:
關于這三種選項,首先,請無視None,請不要在任何場景下選擇該選項,該選項意味著SQL Server不對頁進行保護。
其次是TORN_PAGE_DETECTION,在SQL Server中,數據的最小單位是頁,每一頁是8K,但是對應磁盤上往往是16個512字節的扇區,如果一個頁在寫入持久化存儲的過程中,
只寫了一半的頁,這就是所謂的TORN_PAGE_DETECTION,SQL Server通過每個扇區提512?節中前2位作為元數據,總共16個扇區32位4字節的元數據(頁頭中標識為:m_tornBits),
通過該元數據來檢測是否存在部分寫的TORN_PAGE,但該類型的頁驗證無法檢測出頁中的寫入錯誤,因此在SQL Server 2005及以上版本,盡量選擇CheckSum。
在SQL Server 2005及以上版本,引入了CheckSum,CheckSum可以理解為校驗和,當數據頁被寫入持久化存儲時,會根據頁的值計算出一個4字節的CheckSum存于頁頭(頁頭中標識同為:m_tornBits),
和數據在同一頁中一起保存在數據庫中。當數據從IO子系統被讀取到內存中時,SQL Server會根據頁內的值再次計算CheckSum,用該重新計算的