当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何终止与SQLServer2005数据库的所有当前连接?》经验,为你挑选了9个好方法。

我想重命名数据库,但不断收到数据库上"无法获得独占锁定"的错误,这意味着仍有一些连接处于活动状态.

如何杀死数据库的所有连接以便我可以重命名它?



1> SQLMenace..:

请参阅终止所有活动连接到数据库.

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


@Wagner如果数据库名称中有' - ',则需要在其周围使用括号:ALTER DATABASE [foo-bar] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
请注意 - 请勿在Amazon RDS上托管的SQL Server上尝试此操作.您将无法将数据库重置为MULTI_USER模式.在尝试此操作之前,请确保您有另一组DBA凭据.我通过恢复到以前的快照之一修复了这个问题.丢失了一些数据.幸运的是,数据并不重要.

2> Adam..:

用于完成此操作的脚本,将"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



3> btk..:

杀了它,并用火杀死它:

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



4> Joseph Daigl..:

使用SQL Management Studio Express:

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

你应该能够在那之后重命名.


如果你右键单击SERVER而不是DB,我找到了一个"Activity Montior".然后,您可以选择"进程"选项卡并按数据库筛选.

5> brendan..:

我一直用:

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 



6> 小智..:
ALTER DATABASE [Test]
SET OFFLINE WITH ROLLBACK IMMEDIATE

ALTER DATABASE [Test]
SET ONLINE



7> 小智..:

离线需要一段时间,有时我会遇到一些问题..

我认为最坚实的方式:

分离 右键单击DB - >任务 - >分离...选中"删除连接"确定

重新连接 右键单击数据库 - >附加..添加... - >选择您的数据库,并将附加为列更改为所需的数据库名称.好



8> Talha..:
Select 'Kill '+ CAST(p.spid AS VARCHAR)KillCommand into #temp
from master.dbo.sysprocesses p (nolock)
join master..sysdatabases d (nolock) on p.dbid = d.dbid
Where d.[name] = 'your db name'

Declare @query nvarchar(max)
--Select * from #temp
Select @query =STUFF((                              
            select '  ' + KillCommand from #temp
            FOR XML PATH('')),1,1,'') 
Execute sp_executesql @query 
Drop table #temp

使用'master'数据库并运行此查询,它将终止数据库中的所有活动连接.



9> RedWolves..:

当我尝试恢复数据库时,我经常遇到这个错误我通常只是在Management Studio中找到树的顶部并右键单击并重新启动数据库服务器(因为它位于开发机器上,这在生产中可能不太理想).这是关闭所有数据库连接.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有