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

时间:2020-03-05 18:39:44  来源:igfitidea点击:

我想重命名数据库,但不断收到错误消息"数据库无法获得排他锁",这意味着仍有一些连接处于活动状态。

如何终止与数据库的所有连接,以便对其进行重命名?

解决方案

回答

在对象浏览器上的MS SQL Server Management Studio中,右键单击数据库。在随后的上下文菜单中,选择"任务->脱机"

回答

请参阅终止与数据库的所有活动连接。

亚当建议的方法行不通的原因是,在循环活动连接的过程中,可以建立新的连接,而我们会错过这些连接。我链接到的文章使用以下方法,但没有此缺点:

-- 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

回答

为此,请用脚本替换" 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

回答

使用SQL Management Studio Express:

在"对象资源管理器"树中,在"管理"下向下钻取到"活动监视器"(如果在那里找不到它,则右键单击数据库服务器,然后选择"活动监视器")。打开活动监视器,我们可以查看所有过程信息。我们应该能够找到我们感兴趣的数据库的锁,并杀死这些锁,这也会终止连接。

之后,我们应该可以重命名了。

回答

试试这个:

ALTER DATABASE [DATABASE_NAME]
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE

回答

我一直使用:

ALTER DATABASE DB_NAME SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
GO 
SP_RENAMEDB 'DB_NAME','DB_NAME_NEW'
Go 
ALTER DATABASE DB_NAME_NEW  SET MULTI_USER -- set back to multi user 
GO

回答

在尝试还原数据库时,通常会遇到该错误,我通常只是移至M​​anagement Studio中树的顶部,然后右键单击并重新启动数据库服务器(因为它在开发机器上,因此在生产中可能并不理想)。这将关闭所有数据库连接。

回答

杀死它,然后用火杀死它:

USE master
go

DECLARE @dbname sysname
SET @dbname = 'yourdbname'

DECLARE @spid int
SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname)
WHILE @spid IS NOT NULL
BEGIN
EXECUTE ('KILL ' + @spid)
SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname) AND spid > @spid
END

回答

这是在MS SQL Server Management Studio 2008中可靠地进行此类操作的方法(也可能适用于其他版本):

  • 在"对象资源管理器树"中,右键单击根数据库服务器(带有绿色箭头),然后单击"活动监视器"。
  • 在活动监视器中打开"进程"选项卡,选择"数据库"下拉菜单,然后按所需的数据库进行筛选。
  • 在对象资源管理器中右键单击数据库,然后启动"任务->脱机"任务。在我们执行以下操作时,让它在后台运行
  • 安全关闭所有可能的工具。
  • 从"进程"选项卡中杀死所有剩余的进程。
  • 使数据库重新联机。
  • 重命名数据库。
  • 使服务重新联机,然后将其指向新的数据库。

回答

右键单击数据库名称,单击"属性"以获取属性窗口,打开"选项"选项卡,然后将"限制访问"属性从"多用户"更改为"单用户"。当我们单击"确定"按钮时,它将提示我们关闭所有打开的连接,选择"是",并设置为重命名数据库...。