Sql-Server
如何檢查哪些頁面是范圍的一部分?
我有一些數據損壞,無法通過備份恢復數據。它主要影響非聚集索引,因此在刪除索引後問題得到解決。
最後,我有:
數據庫 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個月前的嗎?昨天?你真的不會知道的。如果它是文本樹的一部分怎麼辦?關鍵是,唯一安全的做法通常是解除分配範圍。沒有其他分配結構聲明它,您不知道它何時來自。