Sql-Server

將 DBCC CHECKDB 劃分為多天

  • May 12, 2020

我正在為非常大的數據庫實施 Paul Randal在幾天內手動傳播 DBCC CHECKDB 的方法,該數據庫基本上包括:

  • 將數據庫中的表大致平均劃分為 7 個桶
  • 每週執行兩次 DBCC CHECKALLOC
  • 每週執行一次 DBCC CHECKCATALOG
  • 一周中的每一天在一個儲存桶上執行 DBCC CHECKTABLE

有人用過這種技術嗎?有任何現有的腳本嗎?

我擔心這實際上可能無法涵蓋 CHECKDB 所做的一切;CHECKDB 的聯機叢書文件說,除了 CHECKALLOC、CHECKCATALOG 和 CHECKTABLE 之外,它還:

  • 驗證數據庫中每個索引視圖的內容。
  • 使用 FILESTREAM 在文件系統中儲存 varbinary(max) 數據時,驗證表元數據與文件系統目錄和文件之間的連結級別一致性。(僅限 SQL 2008)
  • 驗證數據庫中的 Service Broker 數據。

所以這是我的問題:

  1. 這些額外的檢查是否必要/重要?(索引視圖可能對我來說更重要,我認為我們還沒有使用 Service Broker 或 FILESTREAM。)
  2. 如果是這樣,有沒有辦法單獨執行這些額外的檢查?
  3. CHECKALLOC 和 CHECKCATALOG 似乎執行得非常快,即使在大型數據庫上也是如此。有什麼理由不每天執行這些?

(注意:這將是數百台伺服器上數千個現有數據庫的標準常式,或者至少是超過一定大小的每個數據庫。這意味著重組所有數據庫以使用 CHECKFILEGROUP 等選項對我們來說並不實際。)

這些額外的檢查是否必要/重要?(索引視圖可能對我來說更重要,我認為我們還沒有使用 Service Broker 或 FILESTREAM。)

您可以DBCC CHECKTABLE WITH EXTENDED_LOGICAL_CHECKS 直接在索引視圖上執行。在某些情況下檢查索引視圖可能會出現問題,因此請準備好調查導致的任何誤報。(Paul Randal 在對引用文章的評論中還提到,假陰性也是可能的,但我對此沒有直接經驗。)

如果是這樣,有沒有辦法單獨執行這些額外的檢查?

不支持FILESTREAM單獨執行 Service Broker 或檢查,不。

CHECKALLOC並且CHECKCATALOG似乎執行得非常快,即使在大型數據庫上也是如此。有什麼理由不每天執行這些?

不是我知道的。


你也可以考慮跑步DBCC CHECKCONSTRAINTS。無論您指定任何選項,此檢查都不包含在 中。如果情況允許, DBCC CHECKDB您可能還想考慮偶爾跑步。CHECKDB

引用自:https://dba.stackexchange.com/questions/48365