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.

 

 

clip_image001

 

 

clip_image002

 

clip_image003

 

 

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

 

 

image


免責聲明!

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



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