誤區(qū) #27:使用BACKUP ... WITH CHECKSUM可以替代DBCC CheckDB 錯(cuò)誤 乍一看,由于BACKUP WITH CHECKSUM會(huì)檢測(cè)所有分配出去的頁的校驗(yàn)和的值,這個(gè)誤區(qū)貌似是這么回事,但實(shí)際上并不是這么回事,原因如下: 由SQL Server 2000或是更早版本升上來的數(shù)據(jù)庫page checksums必須開啟,在開啟后,并不是數(shù)據(jù)庫中所有的頁都會(huì)被叫上頁校驗(yàn)和,當(dāng)頁損壞發(fā)生時(shí),IO系統(tǒng)可不會(huì)區(qū)分損壞的頁是有頁校驗(yàn)和還是沒有校驗(yàn)和的。所以使用BACKUP ... WITH CHECKSUM就有可能導(dǎo)致一些損壞頁不被發(fā)現(xiàn),造成的后果…… 除此之外,還有一個(gè)問題是完整備份的時(shí)間間隔相對(duì)比較長(zhǎng),假如說一個(gè)月,而相對(duì)于DBCC CheckDB的最佳實(shí)踐是一個(gè)禮拜,這導(dǎo)致WITH CHECKSUM不能替代CHECKDB。即使你每周都進(jìn)行差異備份,但差異備份只會(huì)檢測(cè)差異部分的頁校驗(yàn)和。 最后一點(diǎn),也是危害最大的一點(diǎn),就是使用BACKUP WITH CHECKSUM選項(xiàng)不能發(fā)現(xiàn)內(nèi)存中的頁損壞。這是因?yàn)橛捎趦?nèi)存芯片或是WINDOWS進(jìn)程導(dǎo)致內(nèi)存中的頁損壞,并且在這之后寫回磁盤。這導(dǎo)致?lián)p壞頁卻有正常的校驗(yàn)和,只有使用DBCC CheckDB才能發(fā)現(xiàn)這類錯(cuò)誤。 因此,說到底,你必須經(jīng)常使用DBCC CHECKDB,如果對(duì)此你仍然心存疑問,請(qǐng)看我之前的一篇文章:CHECKDB From Every Angle: Consistency Checking Options for a VLDB。
擴(kuò)展閱讀:Search Engine Q&A #26: Myths around causing corruption