web-dev-qa-db-ja.com

SQL Server 2008 DBCCの問題

データベースMsがあります

DBCC CHECKDB (MS)

または

ALTER DATABASE MS SET SINGLE_USER
DBCC CHECKDB(MS,REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE MS SET MULTI_USER

エラーメッセージ

メッセージ0、レベル11、状態0、行0:
現在のコマンドで重大なエラーが発生しました。結果がある場合は、破棄する必要があります。

メッセージ0、レベル20、状態0、行0:
現在のコマンドで重大なエラーが発生しました。結果がある場合は、破棄する必要があります。


時間をかけて各テーブルをテストした後、問題のあるテーブルは「LC」であることがわかりました

DBCC CHECKTABLE(LC)

エラーメッセージ

メッセージ211、レベル23、状態51、行1:
スキーマが破損している可能性があります。 DBCC CHECKCATALOGを実行します。


さて、

DBCC CHECKCATALOG

メッセージ

DBCCの実行が完了しました。 DBCCがエラーメッセージを出力した場合は、システム管理者に連絡してください。


インデックスも見てみました

SELECT * FROM sysindexes

エラーメッセージ

メッセージ211、レベル23、状態51、行1:
スキーマが破損している可能性があります。 DBCC CHECKCATALOGを実行します。

メッセージ0、レベル20、状態0、行0:
現在のコマンドで重大なエラーが発生しました。結果がある場合は、破棄する必要があります。


再び、

SELECT * FROM LC 

または

DROP TABLE LC

エラーメッセージ

メッセージ211、レベル23、状態51、行1:
スキーマが破損している可能性があります。 DBCC CHECKCATALOGを実行します。

メッセージ0、レベル20、状態0、行0:
現在のコマンドで重大なエラーが発生しました。結果がある場合は、破棄する必要があります。


その特定のテーブルのデータ損失は気にしません。テーブルを削除してもらいたいのです。任意のアイデア、助けてください!

5
Nick Binnet

あなたはRESTOREを使うことができ、決して REPAIR_ALLOW_DATA_LOSS(記事は読む価値があります)!真剣に、どのような量のDBCCブードゥー教でもデータベースを元の正常な状態に戻すことはできません。

8
gbn

これらのタイプのエラーの最も可能性の高い原因は、障害のあるディスクドライブです。トラブルシューティングを続行する前に、ハードディスクを hdtune またはchkdsk /Rでテストします。メモリテストもお勧めします(Windowsメモリ診断と呼ばれる組み込みテストがあります)。

マシンに問題がないことを確認したら、すべての適切なテーブルを新しいデータベースにコピーできます。その後、古いデータベースを削除できます。

2
Andomar