頁面?checksum?是SQL2005的新功能,提供了一種比殘缺頁檢測強大的機制檢測IO方面的損壞。以下是詳細描述:
頁面?CHECKSUM:
在數(shù)據(jù)庫頁面從被寫入磁盤到被SQL Server讀取的這段時間內(nèi),有可能由于外界原因發(fā)生損壞。比如I/O設備的損壞,驅動的損壞或者由于電源不穩(wěn)沒有寫完整。Checksum機制使SQL Server可以檢測到這些損壞。需要注意的是,Checksum機制只能使我們確定是不是I/O子系統(tǒng)引起頁面損壞,但是不能自動修復它們。作為管理員,我們可以利用這些信息來辨識出并更換損壞的I/O設備,也可以利用重建索引或者修復損壞文件等方法修復已發(fā)生的頁面損壞。
Checksum功能可以由Alter Database命令在數(shù)據(jù)庫上逐個開啟和關閉每一個數(shù)據(jù)庫上的。當開啟Checksum時,SQL Server會在頁面被寫入和被讀取的時候計算頁面的Checksum。SQL Server基于頁面上的位模式計算Checksum,儲存在頁頭部,然后發(fā)一個I/O來寫頁面。SQL Server在讀取頁面時用相同的方法再計算一次checksum,并與儲存在頁面頭的checksum值進行比較。如果結果相同則說明在讀寫周期內(nèi)頁面沒有損壞。計算checksum的算法是復雜的,因為會涉及到多個頁面的讀寫,增加CPU的負荷,可能會影響系統(tǒng)的吞吐量。此外,checksum不是與頁面位模式一一對應的,不同頁面也有可能有相同的checksum值,所以有極小的可能性事頁面損壞檢查不出來。
我們對以下幾種情況特別做一些說明:
l??數(shù)據(jù)庫創(chuàng)建一段時間后才開啟checksum
只有在開啟checksum功能后每次寫頁面時才會計算checksum,讀取頁面時才會重新計算。如果數(shù)據(jù)庫創(chuàng)建之初沒有開啟Checksum,會有一些頁沒有記錄下checksum。當讀取這些頁面時SQL Server不會計算checksum,因為沒有可以用來比較的checksum,計算就沒有意義。目前沒有命令或工具強制計算數(shù)據(jù)庫所有頁面的checksum。這樣做并??有太大的好處。試想,當數(shù)據(jù)頁面已經(jīng)被破壞時,我們只能計算損壞的checksum,而不知道正常情況下的checksum,損壞也無從檢測。當然,如果有這樣的命令或工具存在,我們就能檢測到由于位損壞(如一個有效的頁在被寫入到磁盤后發(fā)生損壞)引起的頁面損壞,或者在數(shù)據(jù)庫文件被轉移或者復制到其他媒介的時檢測到損壞了。
l??停止checksum功能
當不希望checksum消耗CPU資源或者確信I/O系統(tǒng)可靠的時候,您可以停止Checksum功能。停止后,不再計算和記錄checksum值。這種情況下,?SQL Server就可能受到外界造成的頁面損壞,一個檢測不到的損壞可能導致:
o??????數(shù)據(jù)丟失,除非運行全備份恢復(前提是日志備份沒有被破壞)
o??????潛在的應用程序異常,特別是在損壞沒有改變頁面結構而只是改變了某些數(shù)據(jù)時。
o??????降低數(shù)據(jù)庫的可用性,因為必須要執(zhí)行介質恢復來修正損壞。
l??如何驗證數(shù)據(jù)庫所有頁的checksum
使用DBCC CHECKDB命令,最好加上PHYSICAL_ONLY參數(shù)以降低資源的消耗。
l??數(shù)據(jù)庫開啟殘缺頁(torn page)檢測
數(shù)據(jù)庫的Checksum檢測和殘缺頁檢測不能同時開啟。因為checksum機制對于頁面損壞的驗證比殘缺頁更嚴格,而產(chǎn)生checksum匹配但是頁面殘缺的可能性極小,所以開啟checksum相當于自動獲取殘缺頁檢測。如果您關閉了頁面的checksum功能,那我們建議您開啟殘缺頁檢測,用較小的代價盡可能檢測I/O子系統(tǒng)異常。
備份?checksum
備份checksum和頁面checksum算法一樣,每當頁面做備份時計算checksum,只不過多個頁面checksum的值將合并成一個備份checksum值。備份checksum儲存在備份媒介,而不是頁面中。備份期間您可以選擇生成備份checksum用于恢復備份時檢測備份時候損壞。另外,如果頁面checksum可用,可以在備份和恢復過程中用于確認。
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
