1. ホーム
  2. sql

[解決済み】データベースへの接続をすべて強制終了するスクリプト (RESTRICTED_USER ROLLBACK より)

2022-04-01 14:55:27

質問

私は、Visual Studio Databaseプロジェクトから頻繁に再デプロイされる開発データベースを持っています(TFS自動ビルド経由)。

ビルドを実行すると、時々このエラーが発生します。

ALTER DATABASE failed because a lock could not be placed on database 'MyDB'. Try again later.  
ALTER DATABASE statement failed.  
Cannot drop database "MyDB" because it is currently in use.  

こんなことをやってみました。

ALTER DATABASE MyDB SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE

が、まだデータベースを落とせません。 (私の推測では、ほとんどの開発者が dbo にアクセスできるようになります)。

を手動で実行することができますね。 SP_WHO を実行し、コネクションを殺すことを開始します。しかし、私は自動構築でこれを行う自動的な方法が必要です。 (ただし、今回は私の接続が、落とそうとしているdb上の唯一のものです。)

誰が接続しているかに関係なく、データベースを削除できるスクリプトはありますか?

解決方法を教えてください。

更新情報

MS SQL Server 2012 以上用

USE [master];

DECLARE @kill varchar(8000) = '';  
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), session_id) + ';'  
FROM sys.dm_exec_sessions
WHERE database_id  = db_id('MyDB')

EXEC(@kill);

MS SQL Server 2000、2005、2008用

USE master;

DECLARE @kill varchar(8000); SET @kill = '';  
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), spid) + ';'  
FROM master..sysprocesses  
WHERE dbid = db_id('MyDB')

EXEC(@kill);