Devデータベースでオフラインメンテナンス(ライブバックアップからdevデータベースの復元)を実行しようとしていますが、SQL Server Management Studioで 'Take Offline'コマンドを実行しています非常にゆっくり - 30分プラス私はちょうど私の知恵の終わりに近づいています、そして私はスピードの問題を引き起こしているかもしれないもの、またはそれをどのように修正するかに関してオンラインでどんな参考文献も見つけることができないようです。
データベースへのオープン接続がこの速度低下を引き起こすといくつかのサイトが示唆していますが、このデータベースを使用する唯一のアプリケーションは私の開発マシンのIISインスタンスであり、サービスは停止します - オープン接続はもうありません。
この速度低下を引き起こしている可能性があるもの、そして速度を上げるために何ができますか?
いくつかの追加の検索(gbnの回答とKMikeの回答に対するu07chのコメントにヒントを得た新しい検索用語)の後、私はこれを見つけました。これは2秒で完了しました:
ALTER DATABASE <dbname> SET OFFLINE WITH ROLLBACK IMMEDIATE
それでも以下のエラーで失敗する場合は、 このブログ記事 にヒントを得て修正することができます。
データベース 'dbname'にロックを設定できなかったため、ALTER DATABASEが失敗しました。後でもう一度やり直してください。
次のコマンドを実行して、誰がデータベースをロックしているのかを調べることができます。
EXEC sp_who2
そして、次のコマンドにあるSPID
を使用します。
KILL <SPID>
それからALTER DATABASE
コマンドを再度実行してください。それは今動作するはずです。
どこかから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
このDBに接続されているSQL Server Management Studioのウィンドウが開いていますか。
シングルユーザーモードにしてからやり直してください。
私の場合、それが終わるのをとても待った後、私は忍耐力を持たず、単に管理スタジオを閉じました。終了する前に、成功メッセージが表示されました。dbはオフラインです。ファイルは名前を変更するために利用可能でした。
ストアドプロシージャsp_who2を実行します。
これにより、ブロッキングロックがあるかどうかを確認できます。
SSMSの場合:SQLサーバーアイコン、Activity Monitorを右クリックします。オープンプロセス処理された接続を見つけます。プロセスを右クリックして、強制終了します。
この種のことに遭遇したときはいつでも、あなたは常にあなたのトランザクションログについて考えるべきです。ロールバック即時のalter dbステートメントは、これが当てはまることを示します。これをチェックしてください: http://msdn.Microsoft.com/en-us/library/ms189085.aspx
チェックポイントなどでボーンアップします。ログ内のトランザクションを保存する価値があるかどうかを判断し、それに応じてデータベースを実行するモードを選択する必要があります。待つ必要がある理由は本当にありませんが、データを失う理由もありません - 両方を持つことができます。
これを回避するために、IISでデータベースに接続されていたウェブサイトを停止し、すぐに ''凍結 '' 'データベースをオフラインにする' 'パネルの凍結が解除されました。
要求が行われたSSMS(SQLサービスマネージャ)のインスタンスを閉じることは私のための問題を解決しました.....
私の場合、このアクションを実行する前に、DB内のいくつかのテーブルを調べました。私のユーザーアカウントはSSMSでこのDBへのアクティブな接続を保持していました。 SSMSでサーバーから切断した後([データベースをオフラインにする]ダイアログボックスを開いたまま)、操作は成功しました。
SSMSで、データベースを読み取り専用に設定してから元に戻します。接続が閉じられ、ロックが解放されます。
私の場合、データベースへのオープン接続を持っているウェブサイトがありました。この方法は十分簡単でした。
Database Read-Only
をTrueに設定しますまた、問題のデータベースに接続されている、開いている可能性があるクエリウィンドウをすべて閉じます。
私は以下のすべての提案を試しましたが、何もうまくいきませんでした。
<SPID>を殺す
ロールバックを使用してALTER DATABASE SET SINGLE_USERを即時に実行
ROLLBACK IMMEDIATEでオフラインでデータベースを設定
結果:上記のコマンドは両方とも動かなくなりました。
4。データベースを右クリック - > [プロパティ] - > [データベースの読み取り専用]を[True]に設定します。ダイアログの警告で[はい]をクリックします。
結果:ウィンドウは実行中に動かなくなりました。
最後の手段として、構成マネージャーからSQLサーバー・サービスを再開してから、ALTER DATABASE SET OFFLINE WITH ROLLBACK IMMEDIATEを実行しました。それは魅力のように働いた
私の場合、Tomcatサーバーを停止しました。その後すぐにDBはオフラインになりました。
私にとっては、Job Activity Monitorに入って処理中の2つのことをやめなければなりませんでした。その後すぐにオフラインになりました。私の場合、私はそれらの2つのプロセスが何であるか、そしてそれらを停止しても大丈夫であることを知っていました。
次回は、[オフラインにする]ダイアログで、[すべてのアクティブな接続を破棄する]チェックボックスをオンにします。ローカルマシンのSQL_EXPRESSにも接続していませんでしたが、このチェックボックスをオンにしない限り、この速度低下は起こりました。
私の場合、データベースは古いSharepointインストールに関連していました。サーバーマネージャで関連サービスを停止して無効にすると、40分間実行されていたオフライン操作が「解除」され、すぐに完了しました。
現在データベースを利用しているサービスがあるかどうかを確認することをお勧めします。