Sql-Server

最後一次成功的 DBCC CHECKDB

  • March 27, 2018

我知道看著DBCC PAGE應該向我展示最後一個已知的好處DBCC CHECKDB,但我沒有看到這項工作正常。

我有一個我知道已損壞的數據庫。如果我執行DBCC CHECKDB錯誤將按預期顯示(見下文)。

CHECKDB found 0 allocation errors and 1 consistency errors in table 'Blah'
  (object ID 251147940).
Msg 2508, Level 16, State 3, Line 1

當我執行以下內容進行評估dbi_dbccLastKnownGood時,我得到了CHECKDB剛剛執行到第二個的時間。

DBCC PAGE ('Blah', 1, 9, 3) WITH TABLERESULTS;

我已經閱讀了 Paul Randal 的資訊,從中看來,我正在正確地做/閱讀。以前有沒有人見過這個,如果有的話,有什麼想法可以解決它嗎?

這是錯誤的完整範例。我為不同的桌子準備了 12 個。

   Msg 2508, Level 16, State 3, Line 1
The In-row data RSVD page count for object "Mailings", index ID 0, partition ID 16459231395840, alloc unit ID 16459231395840 (type In-row data) is incorrect. Run DBCC UPDATEUSAGE.
CHECKDB found 0 allocation errors and 1 consistency errors in table Mailings' (object ID 251147940).

社區維基回答

來自CHECKDB 從各個角度:DBCC CHECKDB 上次成功執行是什麼時候?保羅蘭德爾:

我們在 SQL Server 2005 中加入的一項新功能是儲存DBCC CHECKDB上一次成功完成的時間(稱為最後一次已知的好時間)。這是 DBCC CHECKDB開始的時間,而不是完成的時間。

成功是什麼意思?這就是問題所在——如果DBCC CHECKDB執行完成,那麼它認為執行成功——即使它發現了一些損壞。但是,只有在沒有發現損壞的情況下才會更新最後一次已知的好時間。我知道有點混亂。

似乎有些矛盾,但我同意如果報告錯誤,這聽起來不是該欄位更新的預期行為。

另一方面,您的範例是非常小的問題,可以通過執行輕鬆修復,DBCC UPDATEUSAGE因此 SQL Server 可能會將其視為成功執行。

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