Sql-Server

sql server 2008 r2 DBCC 檢查表錯誤

  • February 19, 2017

今天早上我的數據庫進入了可疑模式。我恢復到昨晚的完整備份以使其重新聯機。我瀏覽了錯誤日誌,發現似乎導致可疑模式的最後一個命令MERGE位於特定表上。我跑DBCC CHECKTABLE在桌子上,得到了以下資訊

Msg 2511, Level 16, State 1, Line 1
Table error: Object ID 1253579504, index ID 7, partition ID 72057594230341632, alloc unit ID 72057594364887040 (type In-row data). Keys out of order on page (1:14254237), slots 184 and 185.
There are 366539002 rows in 3425599 pages for object "PJM_Prices".
CHECKTABLE found 0 allocation errors and 1 consistency errors in table 'PJM_Prices' (object ID 1253579504).
repair_rebuild is the minimum repair level for the errors found by DBCC CHECKTABLE (CaisoAnalyzer.dbo.PJM_Prices).
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

ERRORLOG

Internal database snapshot has split point LSN = 001935ad:00001bf6:0001 and first LSN = 001935ad:00001bf5:0001

有沒有辦法將該表置於單使用者模式或其他一些技巧,我不必為整個數據庫進入單使用者模式?

一種建議是確定導致問題的索引。

select o.name as tablename, i.name as indexname 
 from sys.objects o 
 join sys.indexes i 
   on o.object_id = i.object_id 
 where i.index_id = 7 
   and o.object_id = 1253579504

然後放下它。如果您認為您將需要此索引,那麼我會在刪除 DDL 之前編寫腳本,刪除它,重新創建它,然後重新執行您的 DBCC。由於它index_id是 7,我將假設該表可能被過度索引,因此 YMMV 實際重新創建它。

如果刪除索引不起作用,那麼我總是推薦您可以恢復的最後一個已知良好的備份。此外,如果這種情況已經發生了一段時間,備份也將具有損壞的索引,因為完整備份是數據庫的逐頁副本(+ 一些事務日誌)

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