web-dev-qa-db-ja.com

CHECKDBは、単一のオブジェクトに関連付けられていない2つの割り当てエラーと0の一貫性エラーを検出しました

データベースID 9のメッセージ8906、レベル16、状態1、行1ページ(1:99122)はSGAM(1:3)およびPFS(1:97056)に割り当てられていますが、どのIAMにも割り当てられていません。 PFSフラグ「MIXED_EXT ALLOCATED 0_PCT_FULL」。

データベースID 9のメッセージ8906、レベル16、状態1、行1ページ(1:291360)はSGAM(1:3)とPFS(1:291168)に割り当てられていますが、IAMには割り当てられていません。 PFSフラグ「MIXED_EXT ALLOCATED 0_PCT_FULL」。

CHECKDBは、単一のオブジェクトに関連付けられていない2つの割り当てエラーと0の一貫性エラーを検出しました。

CHECKDBを実行して、上記のエラーを受け取りました。私はSQLエラーの経験がほとんどなく、データベースチームはオプションではありません。修理を行う必要があり、データが失われることを読みました。とにかく、上記のエラーによってどのような種類のデータ損失とその量を予測するのですか?前もって感謝します。

2
jbartley

私の最初の質問は、最新の有効なバックアップがあるかどうかです。データベースのサイズはわずか6Gであり、checkdbによって提案される最小の修復はrepair_allow_data_lossであり、データの損失を引き起こし、データベースからビジネス上の制約を取り除く可能性があるため、有効なバックアップからデータベースを復元することをお勧めします。

バックアップを復元する前に、バックアップの有効性を確認する必要があります。以下を使用してそれを行うことができます

restore verifyonly from disk='Backup location'

クリーンな状態になった場合は、バックアップを復元してデータベースを復元できます。データの損失は、データベースの復旧モデルにも依存します。それが簡単で、一括ログに記録されている場合にのみ完全バックアップと差分バックアップを復元でき、完全バックアップでは、完全、差分、およびログバックアップを復元して、データ損失を最小限に抑えることができます。

エラー後も続行して現在のデータベースのバックアップをとることができますか?以下のコマンドが機能するかどうかを確認してください、それはそうなると思います

backup database db_name to disk='Location' with continue_after_error

これにより、データベースの破損したバックアップが生成され、このバックアップファイルが復元されますON DIFFERENT SERVER continue after句を使用すると、通常の復元は不可能になります。復元コマンドについては TSQL Restore を参照してください。

上記が完了した後、上記の復元されたデータベースで以下のようにトランザクション内でcheckdbを実行します。

Begin transaction
dbcc checkdb('db_name', repair_allow_data_loss)
--commit

この後、データベースを回復するためにcheckdbが削除したデータの量をデータベースで調べることができます。 checkdbは制約も削除するため、実行するように依頼しないことに注意してください。続行する前に Books Online Document をお読みください

最後に、SQL Serverエラーログとイベントビューアを参照して、データベースが破損した理由を確認してください

1
Shanky