私は、DBCC CHECKDB ([MyDb]) WITH NO_INFOMSGS, ALL_ERRORMSGS, PHYSICAL_ONLY
を実行します。
そして、20秒後にエラーで失敗します。
Msg 5030, Sev 16, State 12, Line 1: データベースは、操作を実行するために排他的にロックできませんでした。 操作を実行するために、データベースを排他的にロックできませんでした。 [SQLSTATE 42000] です。 SQLSTATE 42000] > Msg 7926, Sev 16, State 1, Line 1: Check statement aborted.データベース としてチェックできませんでした。 スナップショットを作成できませんでした。 データベースまたはテーブルをロックできませんでした。 どのような場合にこのような動作が発生するかは、Books Onlineを参照してください。 この動作は、どのような場合に想定されるのか、また、どのような gt;回避策があります。また、以前の エラーも参照してください。[SQLSTATE 42000] が発生しました。
データベースは、1TB、SQL Server 2005です。
なぜDBCCは排他的データベースロックが必要なのですか?どうすればチェックができるようになりますか?
追加:データベースへの接続をすべて切断してからチェックを実行すると、DBCCが正常に実行されます。 sp_who2は、.Net SQLClientプロバイダを使用してWebサーバーからDBにアクセスするユーザーを示しています。
SQL Server Serviceは、ローカルアドミニストレーターであるWindowsアカウントで実行されています。
スナップショットの取得を止めている根本的な原因はわかりませんが、DBCC CheckDB
を Tablock
オプション付きで実行してみて、うまくいくかどうか試してみましたか?(Books online explicitly states tablock
option "includes a short-term exclusive (X) lock on the database.").しかし、少なくともスナップショットを取らないので、DBCC CheckDBはこのオプションで成功するかもしれません。もう一つの選択肢は、重要なシステムではなく、ダウンタイムに余裕がある場合です。シングルユーザーモードに変更してDBCCを再度実行するか、テスト環境があれば、どこか別の場所にリストアしてDBCCを実行してみてください。
CheckDBのことならPaul Randal's Blogを参照してください。