web-dev-qa-db-ja.com

ディストリビューションデータベースが壊れています-どうすればよいですか?

以下のエラーメッセージは、SQL Serverデータベースの1つから受信されました。

SQL Serverは、論理整合性ベースのI/Oエラーを検出しました:不正なチェックサム(予想:0x6847f47b;実際:0x15160a19)。ファイル 'C:\ XYZ.MDF'のオフセット0x000001c832e000にあるデータベースID 5のページ(1:934295)の読み取り中に発生しました。 SQL Serverエラーログまたはシステムイベントログに追加のメッセージが表示される場合があります。これはデータベースの整合性を脅かす深刻なエラー状態であり、すぐに修正する必要があります。完全なデータベース整合性チェック(DBCC CHECKDB)を実行します。このエラーは多くの要因によって引き起こされる可能性があります。詳細については、SQL Server Books Onlineを参照してください。

明らかに、破損したデータベースでDBCC CHECKDBを実行する必要があります。それを行う前に、(データベースIDを使用して)データベース名が何であるか、エラーがどのオブジェクトに関連しているか、エラーメッセージで示されたページ番号を調べてみました。

データベース名はdistributionで、テーブル名はMSrepl_errorsであることがわかりました。

SQL Serverのレプリケーション機能についてはあまり詳しくないので、以下の質問で誰かが私を助けてくれるとありがたいです。

  • 問題を調査および/または修正するために、最初にDBCC CHECKDBを実行する必要があります。ただし、CHECKDBは、最初にデータベースをシングルユーザーモードにしないと実行できません。これは正しいですか。

  • distributionデータベースがエンドユーザーによって使用されないという事実に関して、それをシングルユーザーモードにする必要がありますか?そして、もしそうなら、複製ジョブにどのような影響がありますか?

3
RGO

ただし、最初にデータベースをシングルユーザーモードにしないと、CHECKDBを実行できません。これは正しいです?

Checkdbを実行するために、シングルユーザーである必要はありません。 DBCC CHECKDB('distribution') WITH NO_INFOMSGS, ALL_ERRORMSGSを実行して確認できます。

現在の問題がどこにあるのかわからないため、現在のトポロジにどのような影響があるか、または影響があるかどうかを判断するのは困難です。私たちは本当にもっと知る必要があります。CHECKDBからの出力で質問を更新してください。

ディストリビューションデータベースと見なされるシステムデータベースでは、REPAIR_ALLOW_DATA_LOSSの実行がサポートされていないことに注意してください。実際、それは最も破壊的な状況で、そして強迫下でのみ実行されるべきです。これをシステムデータベースに対して実行することを選択すると、すぐにサポートされない構成になります。

3
Sean Gallardy