Sql-Server

DBCC CHECKDB 結果:頁 ID 在其頁眉中包含不正確的頁 ID

  • November 17, 2016

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. 在此之前我會進行數據庫還原。

我建議按照這個順序:

  1. REPAIR_FAST(工作 10 次中的 1 次)。
  2. REPAIR_REBUILD(最多工作 50% 的時間)。
  3. 恢復數據庫。

完整語法

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 文件複製到安全的地方,這樣您就可以隨時回到起點。

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