web-dev-qa-db-ja.com

DBCC:操作を実行するためにデータベースを排他的にロックできませんでした

DBCC CHECKDB ([MyDb]) WITH NO_INFOMSGS, ALL_ERRORMSGS, PHYSICAL_ONLYを実行します

そして20秒後、エラーで失敗します:

Msg 5030、Sev 16、State 12、Line 1:操作を実行するためにデータベースを排他的にロックできませんでした。 [SQLSTATE 42000]

メッセージ7926、Sev 16、状態1、1行目:チェックステートメントが中止されました。データベーススナップショットを作成できず、データベースまたはテーブルをロックできなかったため、データベースをチェックできませんでした。この動作が予想される時期と回避策の詳細については、BooksOnlineを参照してください。詳細については、以前のエラーも参照してください。 [SQLSTATE 42000]

データベースは1TB、SQL Server2005です。

DBCCに排他的なデータベースロックが必要なのはなぜですか?どうすればチェックを完了できますか?

追加:データベースへのすべての接続を強制終了してからチェックを実行すると、DBCCは正常に実行されます。 sp_who2は、.NetSQLClientプロバイダーを使用してWebサーバーからDBにアクセスするユーザーを示します

SQL Serverサービスは、ローカル管理者であるWindowsアカウントで実行されます。

1
user46529

最終的にスナップショットを作成し、その上でDBCCを実行しました。

0
user46529

ほとんどの場合、SQLサービスアカウントには、必要なスナップショットファイルを作成するためのアクセス許可がありません。

アクティブなデータベースでは、割り当てチェックの実行に必要なXデータベースロックをCHECKDBが取得できる可能性はほとんどありません。そのため、ロックタイムアウトをわずか20秒(IIRC)に変更しました。

ありがとう

3
Paul Randal

スナップショットの作成を停止している根本的な原因がわかりません。しかし、Tablockオプションを指定してDBCC CheckDBを実行して、機能するかどうかを確認しましたか? ( オンラインで明示的に予約 状態tablockオプション "データベースの短期排他(X)ロックが含まれます。")ただし、少なくともスナップショットは作成されないため、今回はDBCCCheckDBがこのオプションで成功する可能性があります。もう1つのオプションは、これは重要なシステムではなく、ダウンタイムを許容できることです。シングルユーザーモードに変更して、DBCCを再度実行してみてくださいOR別の場所に復元し、テスト環境がある場合はDBCCを実行してください。

あなたの行く人は Paul Randalのブログ CheckDBのすべてのものでなければなりません。

1
DaniSQL

このエラーを取り除くために詳細なブログ投稿を書きました。

  1. 接続を切断します。 (そうするために:File > Disconnect Object Explorer
  2. 接続を接続します。 (そうするために:File > Connect Object Explorer
  3. [新しいクエリ]ウィンドウを開き、次のコマンドを実行します:use master(注:上記のコマンドは、現在のデータベースをマスターにします。これは、次の一連のコマンドを実行する前に重要です。)
  4. クエリウィンドウで、次の一連のコマンドをコピーして貼り付けます。 「MyDatabaseName」という単語を、排他的アクセスを取得しようとしているデータベース名に置き換えます。

ALTER DATABASE MyDatabaseName SET SINGLE_USER WITH ROLLBACK IMMEDIATE

ALTER DATABASE MyDatabaseName SET SINGLE_USER WITH ROLLBACK AFTER 30

ALTER DATABASE MyDatabaseName SET SINGLE_USER WITH NO_WAIT

ALTER DATABASE MyDatabaseName SET MULTI_USER WITH ROLLBACK IMMEDIATE;

これで完了です。これで、以前に実行しようとしていたDatabase could not be exclusively locked to perform the operationエラーが発生したコマンドまたは操作を試すことができます。

1
user129207

非表示のデータベーススナップショットの容量が不足すると、問題が発生することがあります。データベーススナップショットは、既存のデータファイルの代替ストリームを使用して実装されているため、既存のデータファイルと同じ場所のスペースを消費します。チェック対象のデータベースの更新ワークロードが大きい場合、データベーススナップショットにプッシュされるページが増え、データベースが大きくなります。データベースをホストしているボリュームに十分なスペースがない状況では、これは、非表示のデータベーススナップショットのスペースが不足し、DBCCCHECKDBがエラーで停止することを意味する場合があります。この例を次に示します(エラーは、データベーススナップショットのスペースが不足する正確なポイントによって異なる場合があります)。

このリンクを試してください

http://sqlism.blogspot.com/2014/10/a-database-snapshot-cannot-be-created.html

0
SQLServerFan