誤區 #16:多個關於數據的損壞和修復誤區
坊間流傳的很多版本都不正確
我已經聽過很多關於數據修復可以做什麼、不可以做什麼、什麼會導致數據損壞以及損壞是否可以自行消失。其實我已經針對這類問題寫過多篇博文,因此本篇博文可以作為“流言終結者”來做一個總結,希望你能有收獲。
首先,對於數據修復可以做什麼,不可以做什麼,我已經寫過一篇博文Misconceptions around database repair涵蓋了13個誤區—從不用DBCC CHECKDB是否能修復錯誤(當然不能)到REPAIR_ALLOW_DATA_LOSS是否會引起數據丟失(這個名字的確很讓人迷惑)。
其次,很多人抱怨說DBCC CHECKDB第一次運行時顯示的錯誤在第二次運行時會自行消失。這很好解釋:第一次由DBCC CHECKDB檢測出的錯誤頁已經不屬於頁分配集了,因此在第二次運行DBCC時就顯示不出來了。我有一篇博文對此進行了詳細的解釋:Misconceptions around corruptions: can they disappear?。
還有一個傳的很廣泛的流言是,運行時間長的操作(比如索引重建,大容量數據插入,數據庫或文件的收縮)會導致頁損壞。其實不然,除非SQL Server存在BUG的情況下(非常罕見)。沒有任何T-SQL語句會導致數據出錯。我幾年前寫過一篇文章對此進行了詳細的解釋:Search Engine Q&A #26: Myths around causing corruption。
希望這篇文章對澄清這個概念有幫助