web-dev-qa-db-ja.com

管理スタジオでスタックしたタスク、それらをどのように処理しますか?

Management Studioで[データベースをオフラインにする]をクリックした後、このメッセージはハングしたままで、閉じるをクリックしても閉じません。

https://i.imgur.com/KD6AROv.png

管理スタジオでこのようなスタックしたジョブに対処するための良い方法は何ですか?あなたは活動モニターを介してそれらを殺すことができますか?このジョブの通過を停止しているプロセスを探して終了する必要がありますか?

13
A_V

データベースが使用されていないという事実を知らない限り、GUIで「オフラインにする」ことは決して使用しないでください。なんでも。これは、いくつかのレッグワークを行わずに知るのは難しいので、このスクリプトをどこかに保存して、常にこれを使用してみませんか?

USE [master];
GO
ALTER DATABASE $dbname$ SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE $dbname$ SET OFFLINE;

そしてもちろんその逆:

ALTER DATABASE $dbname$ SET ONLINE;
GO
ALTER DATABASE $dbname$ SET MULTI_USER;

最初にSINGLE_USERに設定する必要があるのは、SQL Serverがオフラインにするためのデータベース。とにかく、大規模なバックアップ操作またはETLジョブの途中でこれを実行する場合や問題がある場合と同様に、データベースを現在使用しているユーザーを確認するために、追加のレッグワークを実行したい場合があります。

[〜#〜] edit [〜#〜]:これに関するConnectの提案を提出しました( Connect#2687832)を参照 =)および Trello にも投稿しました(「オブジェクトエクスプローラー」に提出)。

13
Aaron Bertrand

すでにハングアップしている状況になっている場合は、サーバー全体で開いている接続を検索できることを忘れないでください

sp_who2  

マスターなどの別のデータベース。
データベースをオフラインにしようとしているものがないか、結果をスキャンします。
これらの行のspid(プロセスID)列の値に注意してください。

一度に1つずつ実行

kill  ##

ここで、「##」はspidです。

確かに、これらのプロセスを実行したままにすることが重要ではないことを確認してください。最新のコマンドを終了することなく、警告なしに終了します。

9
Mike M