web-dev-qa-db-ja.com

MSDBおよびマスターシステムデータベースでCHECKDBが失敗する

メンテナンスプランで次のエラーが発生します。

クエリ "DBCC CHECKDB(N'master ')WITH NO_INFOMSGS"の実行は次のエラーで失敗しました: "データベースを排他的にロックして操作を実行できませんでした。チェックステートメントが中止されました。データベーススナップショットをチェックできなかったため、データベースをチェックできませんでしたが作成され、データベースまたはテーブルをロックできませんでした。この動作が予想される状況と回避策の詳細については、Books Onlineを参照してください。詳細については、以前のエラーも参照してください。」考えられる失敗の理由:クエリの問題、「ResultSet」プロパティが正しく設定されていない、パラメーターが正しく設定されていない、または接続が正しく確立されていない。

クエリアナライザーからコードを実行すると、次のようになります。

USE [master]
GO
DBCC CHECKDB(N'master')  WITH NO_INFOMSGS,  PHYSICAL_ONLY

メッセージ5030、レベル16、状態12、行1操作を実行するためにデータベースを排他的にロックできませんでした。メッセージ7926、レベル16、状態1、行1チェックステートメントが中止されました。データベースのスナップショットを作成できず、データベースまたはテーブルをロックできなかったため、データベースをチェックできませんでした。この動作が予想される状況と回避策の詳細については、Books Onlineを参照してください。詳細については、以前のエラーも参照してください。

私はフィックスを見つけるためにハイとローを検索しましたが、サイコロはありませんでした。

事実:

  • SQL Server 2008 R2 Standard 64ビット(10.50.4000.0)
  • Windows Server 2008 R2 64ビットw/SP1
  • VMWare仮想マシン
  • 本番サーバーなので、内部の変更管理プロセスなしではサーバー/インスタンスを再起動できません
  • SQL Serverエージェントとデータベースエンジンのサービスアカウントは、MDFとLDFが格納されているフォルダーとファイルへのフルアクセス権を持っています
  • Config Mgrを介してSQL Serverエージェントを再起動しました。
  • SQL Serverエージェントには、ボリューム全体に対する読み取り権限があります
  • 読み取り専用のFGはありません
  • DBがシングルユーザーモード、読み取り専用、または緊急モードではない
  • DBCCコマンドでTABLOCKを実行していない
  • DBはNTFS上にあります

以下は、私が多くの中で読んだいくつかの場所ですが、私が見る限り、これらは私の問題に最も当てはまります。 SQL Serverエラーログからの結果またはエラーメッセージ出力に変更を加えずに、提案された「修正」を実行しました。

ポールランダルの入力

Microsoft

2
Sean Perkins

特定のDBCCコマンドを実行すると、SQL Serverが作成しようとする内部スナップショットがあります。 DBCCのBOLリファレンス には、これに関する非常に優れた情報があります。

これらのDBCCコマンドのいずれかを実行すると、データベースエンジンはデータベーススナップショットを作成し、それをトランザクションの一貫性のある状態にします。次に、DBCCコマンドはこのスナップショットに対してチェックを実行します。 DBCCコマンドが完了すると、このスナップショットは削除されます。

場合によっては、内部データベースのスナップショットが不要であるか、作成できないことがあります。これが発生すると、DBCCコマンドが実際のデータベースに対して実行されます。データベースがオンラインの場合、DBCCコマンドはテーブルロックを使用して、チェックするオブジェクトの一貫性を保証します。この動作は、WITH TABLOCKオプションが指定された場合と同じです。

マスターデータベースは特に興味深いものです。内部スナップショットを作成できない場合、マスターに対してDBCC CHECKDBが失敗します。上記の参照に従って:

内部データベースのスナップショットを作成できない場合、マスターに対してDBCC CHECKDBを実行すると失敗します。

では、内部スナップショットの作成が失敗する原因は何ですか?上記の参照には、Niceリストがあります。

DBCCコマンドを実行しても、内部データベースのスナップショットは作成されません。

  • マスターに対して、SQL Serverのインスタンスがシングルユーザーモードで実行されています。

  • マスター以外のデータベースに対して。ただし、ALTER DATABASEステートメントを使用して、データベースがシングルユーザーモードになっている。

  • 読み取り専用データベースに対して。

  • ALTER DATABASEステートメントを使用して緊急モードに設定されているデータベースに対して。

  • Tempdbに対して。この場合、内部制限のため、データベーススナップショットを作成できません。

  • WITH TABLOCKオプションを使用する。この場合、DBCCはデータベーススナップショットを作成しないことにより、要求を受け入れます。

DBCCコマンドは、以下に対してコマンドが実行されると、内部データベーススナップショットの代わりにテーブルロックを使用します。

  • 読み取り専用のファイルグループ

  • FATファイルシステム

  • 「名前付きストリーム」をサポートしないボリューム

  • 「代替ストリーム」をサポートしないボリューム

私の推奨は、その情報を見て、どれがあなたの状況に適用されているかを見つけることです。それはあなたの質問に答え、解決に向かって進むはずです。

2
Thomas Stringer

もう1つ確認することは、SQLサービスアカウントがデータファイルを保持するドライブに対する権限を持っているかどうかです。私の場合は問題でした。

0
Niyamath