1. 程式人生 > >SQL Server一致性錯誤修復案例總結

SQL Server一致性錯誤修復案例總結

sci area partition 索引 現在 遇到 otto min blog

原文:SQL Server一致性錯誤修復案例總結

今天遇到了一個關於數據庫一致性錯誤的案例。海外工廠的一臺SQL Server 2005(9.00.5069.00 Standard Edition)數據庫在做DBCC CHECKDB的時候出現了一致性錯誤,下面總結一下處理過程。具體的一致性錯誤信息如下所示:

Msg 8992, Level 16, State 1, Line 1

Check Catalog Msg 3853, State 1: Attribute (referenced_major_id=248841561,referenced_minor_id=6) of row (class=0,object_id

=440842245,column_id=0,referenced_major_id=248841561,referenced_minor_id=6) in sys.sql_dependencies does not have a matching row (object_id=248841561,column_id=6) in sys.columns.

Msg 8992, Level 16, State 1, Line 1

Check Catalog Msg 3853, State 1: Attribute (referenced_major_id=264841618,referenced_minor_id

=7) of row (class=0,object_id=440842245,column_id=0,referenced_major_id=264841618,referenced_minor_id=7) in sys.sql_dependencies does not have a matching row (object_id=264841618,column_id=7) in sys.columns.

CHECKDB found 0 allocation errors and 2 consistency errors not associated with any single object

.

DBCC results for ‘sys.sysrowsetcolumns‘.

Msg 2508, Level 16, State 1, Line 1

The In-row data USED page count for object "GRNPGDetail", index ID 0, partition ID 60321137623040, alloc unit ID 60321137623040 (type In-row data) is incorrect. Run DBCC UPDATEUSAGE.

關於第三個一致性錯誤,我之前多篇博客都介紹過這種類型的一致性錯誤,需要使用DBCC UPDATEUSAGE,該命令可以針對表或索引中的每個分區更正行、已用頁、保留頁、葉級頁和數據頁的計數。DBCC UPDATEUSAGE命令報告目錄視圖中的頁數和行數錯誤並進行更正。這些錯誤可能導致sp_spaceused 系統存儲過程返回不正確的空間使用報告。此處略過。

下面我們來看看下面這個一致性錯誤,從類型上,是屬於元數據損壞(metadata corruption)。但是這個案例呢,又有點特別,跟我之前遇到SQL Server元數據損壞(metadata corruption)修復案例不同我們先來看看分析過程

首先,通過object_id找到這三個對象,然後我們通過錯誤信息,可以判斷sys.sql_dependencies裏面引用的對象,發現在sys.columns裏面不存在這行記錄(object_id=248841561,column_id=6;object_id=264841618,column_id=7 ), 如下截圖所示,確實沒有找到(object_id=248841561,column_id=6;object_id=264841618,column_id=7 )的記錄。

Msg 8992, Level 16, State 1, Line 1

Check Catalog Msg 3853, State 1: Attribute (referenced_major_id=248841561,referenced_minor_id=6) of row (class=0,object_id=440842245,column_id=0,referenced_major_id=248841561,referenced_minor_id=6) in sys.sql_dependencies does not have a matching row (object_id=248841561,column_id=6) in sys.columns.

技術分享圖片

技術分享圖片

技術分享圖片

然後分析存儲過程zzzPrcUnallocationAgingSM_not used(其實看這個存儲過程命名,就知道這個存儲過程廢棄了,我們有些開發人員喜歡這樣將一個存儲過程標記為廢棄了),研究分析發現,代碼裏面視圖VW_SMAllocatedQty有個字段FactoryPoNo,而實際上,視圖已經沒有了這個字段,所以才會報這個一致性錯誤,只要註釋掉這一行或刪除這個存儲過程,問題就解決了,DBCC CHEKDB檢查,就會發現不存在一致性錯誤了。

技術分享圖片

SQL Server一致性錯誤修復案例總結