2009-10-06 131 views
1

我有一個SQL Server數據庫。其中一個表格有一列,因爲缺少一個更好的單詞,它的行爲已被破壞。我可以選擇*或者甚至選擇特定的列並且工作正常。我可以執行諸如count,order by和group by之類的函數,而不會出現任何問題。但是,如果我嘗試在這一列上執行這些功能之一,則會出錯並顯示以下消息:錯誤:(狀態:S1000,本機代碼:E28)數據庫中的列已損壞

另外,我使用winsql連接到數據庫。

有沒有人見過這種行爲?

附加信息:

select colname from tablename

工作正常

select colname from tablename order by colname

產生錯誤

+0

你能發表一些代碼嗎? – 2009-10-06 15:12:10

+1

錯誤是什麼? – 2009-10-06 16:42:50

+0

這似乎是一個服務器故障問題,但我不願意遷移它,因爲它與編程有關。你可能會問它(serverfault.com)是否有人在SF可以幫助你。如果你在SF上找到一個,請在這裏給出答案。 – 2009-10-06 17:16:31

回答

2

嘗試重建索引。我有類似的問題,重建索引修復它。在另一種情況下,重建索引不起作用,所以我必須恢復夜間備份。謝天謝地,我們對開發數據庫進行了夜間備份。

1

如果SQL數據庫報告腐敗/這真的是腐敗 - 開始非常小心。腐敗可能以823/824和其他嚴重性錯誤開始顯現。保持冷靜並運行DBCC CheckDB - 找出損壞程度。不要分離它或開始執行隨機操作。

在繼續進行之前,您應該採取事務日誌的日誌備份尾巴 - 如果您被迫恢復,您可能需要它。我可能會採取與COPY_ONLY選項。

CheckDB可能需要一些時間,但讓它完成,看看有多少腐敗正在報告,以及他們被報告什麼對象。

通過索引重建可以很容易地解決數控指標的腐敗問題,撕裂頁面的損壞將變得更加困難。

如果CheckDB拒絕完成並且錯誤本身,那麼您有一個真正的問題,並且會導出您可以從備份中恢復的數據。

其中一個最好的地方閱讀腐敗和查找/修復/當它的遊戲結束是保羅S. Randal的博客。 http://www.sqlskills.com/blogs/paul/

這隻適用於你真正在查看腐敗而不是一些狡猾的SQL。

+0

「按列名選擇* from tablename order」算作dodgy sql嗎? – Kevin 2009-10-06 16:23:51

+0

它不應該是,而是通過SQL mgmt studio來運行它,以確保在服務器上執行任何操作之前,不會有任何干擾。如果失敗,請記下錯誤消息並開始謹慎行事。 – Andrew 2009-10-06 16:29:00