天天看點

對于超大型SQL SERVER資料庫執行DBCC操作

對于資料庫維護,主要使用DBCC CHECKDB來實作,以下是對大型資料庫的使用說明,小型資料庫一般直接使用就可以了:

1、2008(2005我不确認)已經實作了快照檢查,也就是當你執行DBCC時,DBMS會先快照出一個資料庫,然後在快照上執行檢查,這樣對原來的庫不造成鎖的影響。

2、使用Physical_only選項,可以以較少的開銷檢查資料庫的實體一緻性。并且能檢查出會危及使用者資料安全的殘缺頁、校驗和錯誤及常見的硬體故障。是以對于頻繁使用的生産庫,建議使用該選項。,可以極大地縮短對大資料庫運作DBCC CHECKDB的時間。

3、CHECKDB所花費的時間主要取決于:

  a、資料庫自身大小;

  b、目前I/O讀寫能力和繁忙程度;

  c、目前系統CPU負荷;

  d、目前資料庫的并發修改量;

  e、存放tempdb磁盤的速度;

  f、資料庫對象類型:如LOB會花更多時間;

  g、CHECKDB的參數;參數的選擇會影響DBCC所做的事情多少;

  h、資料庫的錯誤類型和錯誤數量;

按照别人的經驗:1T的資料庫如果沒錯誤,checkdb可能要花上20小時。如果一個成百上千的資料庫,哪怕隻有2、300G。可能一天都跑不完。

現在入正題:

如果資料庫設計了分區表機制,做起來會簡單一些,對于存儲曆史資料的分區檔案組,由于本身資料不發生變化,可以設為隻讀模式,防止任何錯誤修改。每個月左右經行一次DBCC CHECKFILEGROUP即可。對于目前資料,最好一周兩次,單獨做DBCC CHECKFILEGROUP。

如果沒有分區的超大型資料庫,可以參照以下方式:

周一到周三:每天運作一組DBCC CHECKTABLE

周四:DBCC CHECKALLOC+一組DBCC CHECKTABLE

周五周六:每天運作一組DBCC CHECKTABLE 

周日:DBCC CHECKALLOC+DBCC CHECKCATALOG+一組DBCC CHECKTABLE。

對于TB級資料庫可以嘗試使用這個方法。