SQL Server提供了一項用來檢測數據損壞、非常關鍵的內置功能,叫做“頁校驗”(page verification)。當你運行查詢語句,出現煩人的損壞警報時,正是頁校驗檢測到了損壞。最重要的是,最好把頁校驗選項設置為新數據庫的默認選項。你不需要做任何事情就可以用這個選項保護數據庫。
頁校驗和也就是我之前提到過的在備份和恢復中使用CHECKSUM進行的額外檢測(具體閱讀《DBA 五大致命失誤:你的備份可靠嗎?》)。啟用該選項,SQL Server會計算整個頁面的校驗和,把這個值存于頁頭。當頁被讀取到內存時,SQL Server會再次計算校驗和,和頁頭存儲的校驗和進行比較。如果兩個校驗和不一致,SQL Server就會認為該頁被損壞,出現錯誤824的警報。如果校驗和存儲在頁頭,用CHECKSUM選項檢測任何被校驗和保護的的數據頁是否存在損壞,SQL Server會在備份和恢復期間進行計算。
在SQL Server的數據庫級別,可以設置頁保護類型,頁校驗一共有三個選項:CheckSum,Torn Page Detection和None。使用這些選項所花費的功夫可能看似微不足道,但如果不使用這些選項可能會對數據庫造成災難性的影響。只有從SQL Server 2000或更早版本進行升級時,你才需要查看一下選項設置,以確保啟用了頁驗證來保護數據庫。最好是選擇CHECKSUM作為頁校驗選項,這也是SQL Server 2005及以后版本的默認選項。SQL Server 2000的默認選項Torn Page Detection;在此之前,你無法配置頁校驗。換而言之,NONE從來都不是頁校驗的默認選項。如果你的數據庫禁用頁校驗,那一定是有人更改了設置。
我認為,如果DBA把頁校驗選項選擇為NONE,這要不就是故意破壞,要不就是水平太低。無論是何種情況,這名DBA都不應允許管理SQL Server。這個錯誤能夠并且應該讓你被炒魷魚,因為這是故意的行為。