SQL SERVER有好多好多功能,選項也一大堆,很多功能選項並不常用。但是如果真有這種需求的時候又想不起來~ 本篇我們就來聊聊備份里的選項checksum,這是個啥玩意?聽都沒聽過?來看下圖: 就是這個選項!不知道各位看官是否知道是乾什麼的?怎麼用? 我詢問了幾個群友都沒用過,正好手頭有環境,那麼 ...
SQL SERVER有好多好多功能,選項也一大堆,很多功能選項並不常用。但是如果真有這種需求的時候又想不起來~
本篇我們就來聊聊備份里的選項checksum,這是個啥玩意?聽都沒聽過?來看下圖:
就是這個選項!不知道各位看官是否知道是乾什麼的?怎麼用? 我詢問了幾個群友都沒用過,正好手頭有環境,那麼我就用例子給大家演示一下吧!
--------------博客地址---------------------------------------------------------------------------------------
Expert 診斷優化系列 http://www.cnblogs.com/double-K/
廢話不多說,直接開整-----------------------------------------------------------------------------------------
首先我們看一下微軟官方文檔給的說明:
錯誤管理選項
使用這些選項可以確定是否為備份操作啟用了備份校驗和,以及備份操作是否將在遇到錯誤時停止。
{ NO_CHECKSUM | CHECKSUM }
控制是否啟用備份校驗和。
NO_CHECKSUM
顯式禁用備份校驗和的生成(以及頁校驗和的驗證)。 這是預設行為。
CHECKSUM
如果此選項已啟用並且可用,則指定備份操作將驗證每頁的校驗和及頁殘缺,並生成整個備份的校驗和。
使用備份校驗和可能會影響工作負荷以及備份吞吐量。
這也許是大多數人的瞭解“啟用了備份校驗和,備份操作將在遇到錯誤時停止”,因為看過官方文檔知道怎麼用,手頭正好有壞庫,正好做個示範~
我們先看一下DBCC CHECKDB的結果 ,目的只是告訴你這是一個有壞頁的資料庫!
好了,那我們做一下備份看看!
正常的備份,不加 checksum 成功備份!
加上checksum備份,失敗!
好像果然和微軟文檔說的一樣!看到這有些看官會想,這不和我做CHECKDB差不多了麽?
博主別的不多就是壞庫多! 我們再拿一個庫試一下!
我們先看一下DBCC CHECKDB的結果 ,目的只是告訴你也這是一個有壞頁的資料庫!
我們用checksum 備份一下
哦??成功了???這是啥意思??
我們先來看一下 backupset的結果 :
那麼損壞的頁沒check出來?我們再看一下 suspect_pages
suspect_pages里只查出了Test 庫的壞頁,那我XB28_3庫的壞頁哪裡去了?
突然想到 suspect_pages 裡面的數據只是 823 錯誤或 824 錯誤而失敗的頁!
而且使用checksum系統表會被漏掉,本文中XB28_3庫的壞頁就是一個object_id = 60的 系統表!
而且並不是資料庫中所有的頁都會被叫上頁校驗和,當頁損壞發生時,IO系統可不會區分損壞的頁是有頁校驗和還是沒有校驗和的。所以使用BACKUP ... WITH CHECKSUM就有可能導致一些損壞頁不被髮現。
這也說明備份時使用checksum不能完全取代DBCC checkDB的作用,這和Paul Randal大神的文章一致 : A SQL Server DBA myth a day: (27/30) use BACKUP WITH CHECKSUM to replace DBCC CHECKDB
--------------博客地址---------------------------------------------------------------------------------------
Expert 診斷優化系列 http://www.cnblogs.com/double-K/
-----------------------------------------------------------------------------------------------------
總結 :備份的checksum 選項可以用來發現資料庫是否損壞,但不是所有類型的壞頁都可以發現。
看官們的疑問:backup with checksum 可以用來取代DBCC checkDB。
這個觀點是不正確的,一些邏輯一致性錯誤checksum是沒法發現的!
資料庫損壞不是很常見,很多DBA工作好多年都沒有遇到,但是做好CHECKDB檢查還是很必要的!萬一齣現你沒有發現就比較悲劇了!
PS : 差異備份也可以使用checksum,但只會校驗差異部分~
----------------------------------------------------------------------------------------------------
註:此文章為原創,歡迎轉載,請在文章頁面明顯位置給出此文鏈接!
若您覺得這篇文章還不錯請點擊下右下角的推薦,非常感謝!