Sql-Server

如何檢查哪些頁面是范圍的一部分?

  • October 19, 2021

我有一些數據損壞,無法通過備份恢復數據。它主要影響非聚集索引,因此在刪除索引後問題得到解決。

最後,我有:

數據庫 ID 15 中的消息 8905、級別 16、狀態 1、行 3 範圍 (1:896320) 在 GAM 中標記為已分配,但沒有 SGAM 或 IAM 已分配它。CHECKDB 發現 1 個分配錯誤和 0 個與任何單個對象無關的一致性錯誤。CHECKDB 在數據庫“db_name”中發現 1 個分配錯誤和 0 個一致性錯誤。repair_allow_data_loss 是 DBCC CHECKDB (db_name) 發現的錯誤的最低修復級別。

我想找出哪些是擴展頁面,然後查看這些頁面中的數據是什麼。然後,決定使用repair_allow_data_loss執行**CHECHDB命令或盡可能保存一些數據。

我想查找哪些是范圍頁面

$$ … $$

它在錯誤中告訴你Extent (1:896320),所以從第 1:896320 頁到 1:896327。

這裡的問題是您有一個分配錯誤,其中範圍被標記為已分配,但沒有其他結構顯示它。它真的是某事的一部分嗎?是不是?

$$ … $$然後看看這些頁面中的數據是什麼。

我知道你來自哪裡,但是,不知道頁面何時來自。這可能是不久前發生的事情,只是被注意到了,所以為了爭論,我們假設那裡有數據。是6個月前的嗎?昨天?你真的不會知道的。如果它是文本樹的一部分怎麼辦?關鍵是,唯一安全的做法通常是解除分配範圍。沒有其他分配結構聲明它,您不知道它何時來自。

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