DBCC CHECKDB 結果:頁 ID 在其頁眉中包含不正確的頁 ID
DBCC CHECKDB
“表名”的結果:消息 8909,級別 16,狀態 1,行 1
表錯誤:對象 ID 1637580872,索引 ID 1,分區 ID 72057596516040704,分配單元 ID 72057594048020480(類型 LOB 數據),頁面 ID (23:853329) 在其頁眉。頁眉中的 PageId = (0:96)。
消息 8928,級別 16,狀態 1,行 1
對象 ID 1637580872,索引 ID 1,分區 ID 72057596516040704,分配單元 ID 72057594048020480(LOB 數據類型):無法處理頁面 (23:853329)。有關詳細資訊,請參閱其他錯誤。
消息 8965,級別 16,狀態 1,行 1
表錯誤:對象 ID 1637580872,索引 ID 1,分區 ID 72057596516040704,分配單元 ID 72057594048020480(類型 LOB 數據)。頁 (23:853329)、槽 0、文本 ID 12904397012992 處的行外數據節點被頁 (16:840512)、槽 0 引用,但在掃描中未看到。
這是我唯一有問題的桌子。
由於在清除一些舊數據時會出現此問題,因此我們沒有足夠的舊備份說乾淨。恢復選項可能是不可能的。
現在我們正在研究維修。單表維修可以嗎?
我們可以重建索引,因為問題出在聚集索引上嗎?
永遠不要使用
REPAIR_ALLOW_DATA_LOSS
. 在此之前我會進行數據庫還原。我建議按照這個順序:
REPAIR_FAST
(工作 10 次中的 1 次)。REPAIR_REBUILD
(最多工作 50% 的時間)。- 恢復數據庫。
完整語法:
DBCC CHECKALLOC [ ( database_name | database_id | 0 [ , NOINDEX | , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ] ) [ WITH { [ ALL_ERRORMSGS ] [ , NO_INFOMSGS ] [ , TABLOCK ] [ , ESTIMATEONLY ] } ] ]
看看你是否可以選擇另一個表:select * into newtable from oldtable
如果這是不可能的,並且您沒有良好的備份,並且您完全用完了任何其他選項,那麼您可以執行 DBCC CHECKTABLE (tablename, REPAIR_ALLOW_DATA_LOSS) http://technet.microsoft.com/en-us /library/ms174338(v=sql.110).aspx
警告!!!!如果您使用 REPAIR_ALLOW_DATA_LOSS 執行 DBCC CHECKTABLE,那麼您很可能會失去數據。此外,不能保證 DBCC CHECKTABLE (tablename, REPAIR_ALLOW_DATA_LOSS) 能夠修復損壞。
在嘗試進行任何修復之前,請關閉 SQL Server 並將 .mdf 和 .ldf 文件複製到安全的地方,這樣您就可以隨時回到起點。