數據庫備份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,但只會校驗差異部分~

 ----------------------------------------------------------------------------------------------------

注:此文章為原創,歡迎轉載,請在文章頁面明顯位置給出此文鏈接!
若您覺得這篇文章還不錯請點擊下右下角的推薦,非常感謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM