SQL Serverデータベースをオフラインにする際の極端な待機時間


278

私の開発データベースでオフラインメンテナンス(ライブバックアップからの開発データベースの復元)を実行しようとしていますが、SQL Server Management Studioを使用した[オフラインにする]コマンドの実行速度が非常に遅くなっています。速度の問題を引き起こしている可能性があるもの、またはそれを修正する方法について、オンラインで参考文献を見つけることができないようです。

一部のサイトでは、データベースへのオープン接続が原因でこの速度低下が発生することを示唆していますが、このデータベースを使用する唯一のアプリケーションは開発マシンのIISインスタンスであり、サービスは停止しています-オープン接続はありません。

このスローダウンの原因は何ですか?スピードを上げるにはどうすればよいですか?

回答:


408

さらに検索を行った後(gbnの回答とKMikeの回答に対するu07chのコメントに触発された新しい検索語句)、これが2秒で正常に完了しました。

ALTER DATABASE <dbname> SET OFFLINE WITH ROLLBACK IMMEDIATE

(更新)

それでも次のエラーで失敗する場合は、このブログ投稿に触発されて修正できます。

データベース 'dbname'をロックできなかったため、ALTER DATABASEが失敗しました。後で再試行してください。

次のコマンドを実行して、データベースをロックしているユーザーを確認できます。

EXEC sp_who2

そしてSPID、次のコマンドで見つけたものをすべて使用します。

KILL <SPID>

その後、ALTER DATABASEコマンドを再度実行してください。これで動作するはずです。


35
これが機能しない(ロックを設定できない)場合は、stackoverflow.com/questions/4673065の解決策も試してください。
nalply

3
Take DB Offlineプロセスがまだ実行されている場合、開発マシンでは、タスクマネージャーからプロセスを強制終了して、上記のコマンドを実行できます。
ヌルヘッド

1
あなたはKILLコマンドを実行し、メッセージを取得する場合は、「自分自身のプロセスを殺すためにKILLを使用することはできません。」、必ずmasterデータベースを使用していることを確認し、コマンドを実行する
ジャロッド

129

おそらくどこかからDBへの接続があります(まれな例:非同期統計更新

接続を見つけるには、sys.sysprocessesを使用します

USE master
SELECT * FROM sys.sysprocesses WHERE dbid = DB_ID('MyDB')

強制的に切断するには、ROLLBACK IMMEDIATEを使用します

USE master
ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE

7
+1は、プロセスクエリにより、このデータベースに何が接続されているかがわかるためです。私の場合、SSMSが開いている悪質な従業員でした:)
MikeMurko

3
私の場合、私はクエリアナライザーウィンドウを開いた状態で悪党でした
dellyjm

1
私の場合、開発者はデータベースで非常によく知られている銀行のポインティングの生産メインウェブサイトはOLD lebelledていた
ZZ9

3
ALTER DATABASE failed because a lock could not be placed on databaseコマンドKILL <SPID>が役立つと書かれている場合
Muflix

28

このDBに接続されているSQL Server Management Studioウィンドウを開いていますか?

シングルユーザーモードにしてから、再試行してください。


2
ALTER DATABASE <DBNAME> SET SINGLE_USER WITH Rollback Immediate
u07ch

KMike-私が持っている唯一の接続は、オフラインにしようとしているデータベースではなく、Masterデータベースに対して開いています。
エリックフォーブス

17

私の場合、それが終わるのをとても待った後、私は忍耐力がなく、単に管理スタジオを閉じました。終了する前に、成功メッセージが表示されました。dbはオフラインです。ファイルの名前を変更できました。


7

ストアドプロシージャsp_who2を実行します。

これにより、ブロッキングロックがあるかどうかを確認できます。


5

SSMSの場合:SQLサーバーアイコン、アクティビティモニターを右クリックします。オープンプロセス。処理された接続を見つけます。プロセスKillを右クリックします。


4

このタイプの問題に遭遇したときはいつでも、常にトランザクションログについて考える必要があります。ロールバック即時の変更dbステートメントは、これが事実であることを示します。これをチェックしてくださいhttp : //msdn.microsoft.com/en-us/library/ms189085.aspx

チェックポイントなどで骨を折る。ログ内のトランザクションが保存する価値があるかどうかを判断し、それに応じてデータベースを実行するモードを選択する必要があります。あなたが待つ必要がある理由は本当にありませんが、データを失う理由もありません-あなたは両方を持つことができます。


2
賢明なアドバイス-ありがとう-しかし、この場合、データは復元されている開発データベースであるため、データは使い捨てです。
エリックフォーブス

3

リクエスト元のSSMS(SQL Service Manager)のインスタンスを閉じると、問題が解決しました。


3

私の場合、このアクションを実行する前にDB内のいくつかのテーブルを見ていました。私のユーザーアカウントは、SSMSでこのDBへのアクティブな接続を保持していました。SSMSでサーバーから切断すると([データベースをオフラインにする]ダイアログボックスを開いたまま)、操作は成功しました。


私と同じ。次に、再接続してアクティブデータベースをマスターに変更し、次のコマンドを実行します
。ALTERDATABASE

2

これを回避するために、IISでデータベースに接続されているWebサイトを停止すると、すぐに「フリーズ」「データベースをオフラインにする」パネルがフリーズしなくなりました。


2

以下の提案をすべて試しましたが、何もうまくいきませんでした。

  1. EXEC sp_who
  2. キル<SPID>

  3. ALTER DATABASE SET SINGLE_USER WITH Rollback Immediate

    ロールバックを即時に使用してデータベースセットをオフラインで変更

    結果:上記のコマンドも両方ともスタックしました。

4。データベースを右クリック->プロパティ->オプションデータベース読み取り専用をTrueに設定ダイアログの警告で[はい]をクリックします。SQLServerはデータベースへのすべての接続を閉じます。

結果:ウィンドウは実行中にスタックしました。

最後の手段として、SQLサーバーサービスを構成マネージャーから再起動し、ALTER DATABASE SET OFFLINE WITH ROLLBACK IMMEDIATEを実行しました。それは魅力のように働きました


1

また、問題のデータベースに接続されている、開いている可能性のあるクエリウィンドウをすべて閉じます;)


1

SSMSで、データベースを読み取り専用に設定してから戻します。接続が閉じられ、ロックが解放されます。

私の場合、データベースへの接続が開いているWebサイトがありました。この方法は非常に簡単でした。

  1. データベースを右クリック->プロパティ->オプション
  2. Database Read-OnlyTrueに設定
  3. SQL Serverはデータベースへのすべての接続を閉じますという警告ダイアログで「はい」をクリックします。
  4. オプションを再度開き、読み取り専用をオフに戻します
  5. 次に、データベースの名前を変更するか、オフラインにします。

0

私にとっては、ジョブアクティビティモニターにアクセスして、処理中の2つの処理を停止する必要がありました。その後、すぐにオフラインになりました。私の場合は、これらの2つのプロセスが何であるかを知っていて、それらを停止しても問題ありませんでした。


0

私の場合、データベースは古いSharepointインストールに関連していました。サーバーマネージャーで関連するサービスを停止して無効にすると、40分間実行されていたオフライン操作が「解除」され、すぐに完了しました。

現在データベースを利用しているサービスがあるかどうかを確認できます。


1
実行sp_who2プロセスは、データベースとの使用を使用しているものを見るためにkill <PID>それらを停止します。
Eric Kigathi 2016年

0

次回は、[オフラインにする]ダイアログで、[すべてのアクティブな接続を削除する]チェックボックスをオンにしてください。接続のないローカルマシンでもSQL_EXPRESSを使用していましたが、このチェックボックスをオンにしない限り、この速度低下が発生しました。


-1

私の場合、Tomcatサーバーを停止しました。その後すぐにDBがオフラインになりました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.