其實我之前已經有文章詳細解釋了頁校正和:How to tell if the IO subsystem is causing corruptions?
誤區 #17:幾個有關頁校正和的誤區
坊間流傳的基本是錯誤的
17 a)頁校正和(Page CheckSum)在從SQL Server 2000或7.0升級上來之後自動開啟
其實不是,從舊的執行個體升級上來的資料庫不會自動開啟頁校正和,除非你顯式使用ALTER DATABASE databasename SET PAGE_VERIFY CHECKSUM進行開啟。而在SQL Server 2005或2008建立的資料庫頁校正和是預設開啟的。
17 b)頁校正和可以糾正錯誤
頁校正和只能發現錯誤,而不是像網路通訊協定中的CRC校正碼那樣可以糾正一位錯誤。
17 c)當開啟頁校正和之後會開始為資料庫中的每一頁加上頁校正和。
錯誤,實際上當開啟頁校正和之後不會有任何線程在前台或是後台來修改頁。只有當你重建索引或是修改頁的時候,頁校正和才會加到頁中。
17 d)對頁進行讀取就可以將校正和加到頁中
錯誤,只要將頁讀取到記憶體之後並進行修改,然後寫回磁碟時,才能夠將頁校正和加入頁。
17 e)當資料庫的頁驗證模式由torn-page detection方式改為頁校正和方式之後,所有的torn-page detection資訊都會丟失
錯誤,每一個頁都知道自己的保護模式是torn-page detection,頁校正和或是完全沒有。正如之前所說,只有頁被修改之後其頁驗證方式才會被修改(譯者註:也就是說一個資料庫可以存在某些頁是torn-page detection,另一些頁是頁校正和方式)。我有一篇文章更詳細的闡述了這部分內容:Inside The Storage Engine: Does turning on page checksums discard any torn-page protection?。
17 f)頁校正和可以在發生錯誤時馬上檢測到
這個誤區是由SQL Server MVP Gail Shaw 提示我進行揭示的。當然也是錯誤的,受損的頁在讀入到記憶體的buffer pool進行有效性驗證之前,是不會被發現的。