web-dev-qa-db-ja.com

repair_allow_data_lossは、DBCC CHECKDBによって検出されたエラーの最小修復レベルです。

データベース破損の問題に対処します。開発環境でコピーを作成しています。一部は破損したインデックスでしたが、その場合は削除して再作成しただけです。ただし、これらは懸念されるデータ破損の問題です。

私が走ると:

DBCC CHECKDB ('DATABASE', REPAIR_ALLOW_DATA_LOSS);

...それは言う:

エラーは修復されました

それは実際にそれが問題を修正したか、それが「修復」であったページを削除してデータが失われたことを意味しますか?

オブジェクトID 1899231358、インデックスID 0、パーティションID 124468026277888、割り当てユニットID 124468026277888(タイプの行内データ):ページ(1:10429642)を処理できませんでした。詳細については、他のエラーを参照してください。
エラーは修復されました。

テーブルエラー:オブジェクトID 1518653945、インデックスID 1、パーティションID 72057594166444032、割り当てユニットID 71875645566156800(タイプLOBデータ)。
ページ(1:10429980)、スロット0、テキストID 954358824960のオフローデータノードは、ページ(1:6660634)、スロット10で参照されていますが、スキャンでは見られませんでした。
エラーは修復されました。

4
Thorin

あなたが使用したオプションが述べているように...あなたは修理でデータを失った

REPAIR_ALLOW_DATA_LOSS

あなたの場合、インデックス0、行内データを失いました。修復は正常に完了しましたが、失われたデータは復元されません。オプションを使用してデータを損失することなく修正可能な破損の唯一のシナリオは、破損がすべてクラスター化されていない(行内ではない)データ上にあった場合です。

以前のバックアップがある場合、破損したページを復元できる場合があります。これは、影響を受けるページに同じ破損がないバックアップに依存しています。これは、checkdbを定期的に実行していない場合、チェックサムページ検証を使用していない場合、およびバックアップにwith checksumオプションを使用している場合に可能性が高いです。

関連する表を確認し、失われたものを別の方法で再構築できるかどうかを確認してください。それ以外の場合は、頑張ってページの復元を試してください。以下を参照してください:

SQL Server StandardおよびEnterprise Editionでページを復元する方法Jes Schultz Borland による

2
Andrew Loree

私の「経験」に関する限り、repair_allow_data_lossが実際に問題を修正することはありません。実際に行うことは、culpritsをできるだけ削除して、残っているものに一貫性があることを確認することです。 。これは常に、腐敗から抜け出すための最後の手段であるべきです。さらに、データベースが脆弱な状態のままになるようにロジックが設計されている貴重な制約/ビジネス上の制約を取り除くことも行います。

MSがここで提供する少しの利点は、トランザクションでrepair_allow_data_lossを実行できますが、実際にはコミットせず、データ損失の量と壊れたデータベースを測定できることです取得する。その後、実際にさらに決定することができます。

repair_allow_data_lossに関するBOLドキュメント から警告セクションを引用しています==

REPAIR_ALLOW_DATA_LOSSオプションは、SQL Serverでサポートされている機能です。ただし、データベースを物理的に整合性のある状態にするための最良のオプションとは限りません。成功した場合、REPAIR_ALLOW_DATA_LOSSオプションはデータの一部を失う可能性があります。実際、ユーザーが最後の既知の適切なバックアップからデータベースを復元する場合よりも多くのデータが失われる可能性があります。マイクロソフトでは、DBCC CHECKDBによって報告されたエラーから回復するための主要な方法として、常に最新の適切なバックアップからユーザーを復元することを推奨しています。 REPAIR_ALLOW_DATA_LOSSオプションは、既知の適切なバックアップから復元するための代替手段ではありません。これは、バックアップからの復元が不可能な場合にのみ使用することをお勧めする緊急の「最後の手段」オプションです。

REPAIR_ALLOW_DATA_LOSSオプションを使用してのみ修復できる特定のエラーには、行、ページ、または一連のページの割り当てを解除してエラーをクリアすることが含まれる場合があります。割り当て解除されたデータは、ユーザーがアクセスまたは回復できなくなり、割り当て解除されたデータの正確な内容を特定できません。したがって、外部キー制約がこの修復操作の一部としてチェックまたは維持されないため、行またはページが割り当て解除された後、参照整合性は正確にならない可能性があります。ユーザーは、REPAIR_ALLOW_DATA_LOSSオプションを使用した後、(DBCC CHECKCONSTRAINTSを使用して)データベースの参照整合性を検査する必要があります。

修復を実行する前に、このデータベースに属するファイルの物理コピーを作成してください。これには、プライマリデータファイル(.mdf)、すべてのセカンダリデータファイル(.ndf)、すべてのトランザクションログファイル(.ldf)、およびフルテキストカタログ、ファイルストリームフォルダー、メモリ最適化データなど、データベースを形成する他のコンテナーが含まれます。

修復を実行する前に、データベースの状態を緊急モードに変更し、重要なテーブルから可能な限り多くの情報を抽出してそのデータを保存することを検討してください。

1
Shanky