web-dev-qa-db-ja.com

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

Devデータベースでオフラインメンテナンス(ライブバックアップからdevデータベースの復元)を実行しようとしていますが、SQL Server Management Studioで 'Take Offline'コマンドを実行しています非常にゆっくり - 30分プラス私はちょうど私の知恵の終わりに近づいています、そして私はスピードの問題を引き起こしているかもしれないもの、またはそれをどのように修正するかに関してオンラインでどんな参考文献も見つけることができないようです。

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

この速度低下を引き起こしている可能性があるもの、そして速度を上げるために何ができますか?

270
Erik Forbes

いくつかの追加の検索(gbnの回答とKMikeの回答に対するu07chのコメントにヒントを得た新しい検索用語)の後、私はこれを見つけました。これは2秒で完了しました:

ALTER DATABASE <dbname> SET OFFLINE WITH ROLLBACK IMMEDIATE

(更新)

それでも以下のエラーで失敗する場合は、 このブログ記事 にヒントを得て修正することができます。

データベース 'dbname'にロックを設定できなかったため、ALTER DATABASEが失敗しました。後でもう一度やり直してください。

次のコマンドを実行して、誰がデータベースをロックしているのかを調べることができます。

EXEC sp_who2

そして、次のコマンドにあるSPIDを使用します。

KILL <SPID>

それからALTER DATABASEコマンドを再度実行してください。それは今動作するはずです。

396
Erik Forbes

どこかから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
125
gbn

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

シングルユーザーモードにしてからやり直してください。

28
KM.

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

17
Rudy

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

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

6
woodwa

SSMSの場合:SQLサーバーアイコン、Activity Monitorを右クリックします。オープンプロセス処理された接続を見つけます。プロセスを右クリックして、強制終了します。

5
nzeemin

この種のことに遭遇したときはいつでも、あなたは常にあなたのトランザクションログについて考えるべきです。ロールバック即時のalter dbステートメントは、これが当てはまることを示します。これをチェックしてください: http://msdn.Microsoft.com/en-us/library/ms189085.aspx

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

4
yetanotherdave

これを回避するために、IISでデータベースに接続されていたウェブサイトを停止し、すぐに ''凍結 '' 'データベースをオフラインにする' 'パネルの凍結が解除されました。

2
Dan

要求が行われたSSMS(SQLサービスマネージャ)のインスタンスを閉じることは私のための問題を解決しました.....

2
Armand G.

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

2
RamenNoodle

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

私の場合、データベースへのオープン接続を持っているウェブサイトがありました。この方法は十分簡単でした。

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

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

1
Steve Woods

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

  1. EXEC sp_who
  2. <SPID>を殺す

  3. ロールバックを使用してALTER DATABASE SET SINGLE_USERを即時に実行

    ROLLBACK IMMEDIATEでオフラインでデータベースを設定

    結果:上記のコマンドは両方とも動かなくなりました。

4。データベースを右クリック - > [プロパティ] - > [データベースの読み取り専用]を[True]に設定します。ダイアログの警告で[はい]をクリックします。

結果:ウィンドウは実行中に動かなくなりました。

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

1
Viraj A

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

0
Java Main

私にとっては、Job Activity Monitorに入って処理中の2つのことをやめなければなりませんでした。その後すぐにオフラインになりました。私の場合、私はそれらの2つのプロセスが何であるか、そしてそれらを停止しても大丈夫であることを知っていました。

0
craig

次回は、[オフラインにする]ダイアログで、[すべてのアクティブな接続を破棄する]チェックボックスをオンにします。ローカルマシンのSQL_EXPRESSにも接続していませんでしたが、このチェックボックスをオンにしない限り、この速度低下は起こりました。

0
Brett Drake

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

現在データベースを利用しているサービスがあるかどうかを確認することをお勧めします。

0
Jonathan