如何杀死当前与SQL Server 2005数据库的所有连接?

我想重命名一个数据库,但一直收到错误提示:无法获得数据库的独占锁,这意味着有一些连接仍在活动。

我怎样才能切断与数据库的所有连接,以便我能够重命名它?

解决办法

请参阅杀死一个数据库的所有活动连接

Adam建议的方法不可行的原因是,在你对活动连接进行循环的时候,可能会建立新的连接,而你会错过这些连接。我所链接的文章使用了以下方法,它没有这个缺点。

-- set your current connection to use master otherwise you might get an error

use master
ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

--do you stuff here 

ALTER DATABASE YourDatabase SET MULTI_USER
评论(6)

要完成这个任务的脚本,用要杀死所有连接的数据库替换'DB_NAME'。

USE master
GO

SET NOCOUNT ON
DECLARE @DBName varchar(50)
DECLARE @spidstr varchar(8000)
DECLARE @ConnKilled smallint
SET @ConnKilled=0
SET @spidstr = ''

Set @DBName = 'DB_NAME'
IF db_id(@DBName) < 4
BEGIN
PRINT 'Connections to system databases cannot be killed'
RETURN
END
SELECT @spidstr=coalesce(@spidstr,',' )+'kill '+convert(varchar, spid)+ '; '
FROM master..sysprocesses WHERE dbid=db_id(@DBName)

IF LEN(@spidstr) > 0
BEGIN
EXEC(@spidstr)
SELECT @ConnKilled = COUNT(1)
FROM master..sysprocesses WHERE dbid=db_id(@DBName)
END
评论(4)

在MS SQL Server Management Studio的对象资源管理器中,右击数据库。在随后的上下文菜单中选择'任务->脱机&39。

评论(1)