你如何杀死一个SQL Server 2005数据库的所有当前连接?(How do you kill

2019-06-17 12:30发布

我要重命名的数据库,但不断收到错误“无法获取排它锁”的数据库,这意味着有一定的联系(S)依然活跃。

我怎么能杀死所有与数据库的连接,这样我可以重新命名呢?

Answer 1:

请参阅杀死所有活动连接数据库 。

究其原因是,该方法亚当建议是行不通的是,在您遍历活动连接新的可以建立,你会想念那些时间。 文章中,我连接到使用以下方法不具有这样的缺点:

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


Answer 2:

脚本做到这一点,与数据库杀死所有连接取代“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


Answer 3:

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

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


Answer 4:

使用SQL管理Studio Express的:

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

你应该能够后重命名。



Answer 5:

我一直使用:


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 


Answer 6:

ALTER DATABASE [Test]
SET OFFLINE WITH ROLLBACK IMMEDIATE

ALTER DATABASE [Test]
SET ONLINE


Answer 7:

脱机需要一段时间,有时我遇到一些问题的..

在我看来,最可靠的方法:

拆下右击数据库- >任务- >分离...勾选“删除连接”好

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



Answer 8:

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

使用“主”数据库,并运行此查询,它会杀死从数据库中的所有活动连接。



Answer 9:

我经常碰到,当我试图还原一个数据库中,我通常只是去树Management Studio中的顶部和右键单击并重新启动数据库服务器(因为它是一个开发机器上的错误,这可能不是在生产中理想)。 这是关闭所有的数据库连接。



Answer 10:

在对象资源管理器MS SQL Server Management Studio中,右键单击数据库。 在下面选择上下文菜单“任务 - >脱机”



Answer 11:

另一种“用火杀死它”的方法是刚刚重新启动MSSQLServer服务。 我喜欢在命令行做的东西。 粘贴此正是进入CMD将做到这一点:NET STOP MSSQLSERVER和NET START MSSQLSERVER

或者打开“SERVICES.MSC”,找到“SQL服务器(MSSQLSERVER)”,并单击鼠标右键,选择“重新启动”。

这将“肯定的,肯定”杀该实例上运行的所有数据库的所有连接。

(我喜欢这个比发生变化,改回配置服务器/数据库上很多方法更好)



Answer 12:

以下是如何可靠地这样的事情在MS SQL Server Management Studio中2008年(可能适用于其他版本的工作太):

  1. 在对象资源管理器树中,右键单击根数据库服务器(用绿色箭头),然后单击活动监视器。
  2. 在活动监视器打开进程选项卡,选择“数据库”下拉菜单中,和过滤通过你想要的数据库。
  3. 右键单击DB在对象资源管理器,并开始了“任务 - >脱机”的任务。 离开这个运行中,而你的背景...
  4. 安全关闭尽你所能。
  5. 杀死从过程标签的所有剩余的处理。
  6. 把DB重新联机。
  7. 重命名DB。
  8. 带上您的服务重新联机,并将其指向新的数据库。


Answer 13:

在这种情况下,我工作的选项如下:

  1. 有问题的数据库上启动“分离”操作。 这西港岛线打开显示,以防止对数据库的操作活动连接的窗口(SQL 2005)。
  2. 杀活动连接,取消该装卸操作。
  3. 现在数据库应该可以恢复。


Answer 14:

试试这个:

ALTER DATABASE [DATABASE_NAME]
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE


Answer 15:

右键单击数据库名称,单击属性来获得属性窗口中,打开选项选项卡和“限制访问”属性从多用户到单用户改变。 当你点击确定按钮,它会提示你关闭所有打开的连接,选择“是”,你都设置为重命名数据库....



Answer 16:

这些并没有为我(SQL2008企业)工作,我也看不到连接到数据库的任何正在运行的进程或用户。 重新启动服务器(右Management Studio中单击SQL Server并挑选重新启动),让我恢复数据库。



Answer 17:

我使用的是SQL Server 2008 R2中,我的数据库已被设置为单用户,有是限制对数据库的任何操作的连接。 因此,建议SQLMenace的解决方案回应错误。 这是一个在我的情况下工作 。



Answer 18:

我用sp_who获取数据库中的所有进程的列表。 这是更好,因为你可能要回顾杀死哪个进程。

declare @proc table(
    SPID bigint,
    Status nvarchar(255),
    Login nvarchar(255),
    HostName nvarchar(255),
    BlkBy nvarchar(255),
    DBName nvarchar(255),
    Command nvarchar(MAX),
    CPUTime bigint,
    DiskIO bigint,
    LastBatch nvarchar(255),
    ProgramName nvarchar(255),
    SPID2 bigint,
    REQUESTID bigint
)

insert into @proc
exec sp_who2

select  *, KillCommand = concat('kill ', SPID, ';')
from    @proc

结果
您可以在KillCommand列中使用命令来杀死你想的过程。

SPID    KillCommand
26      kill 26;
27      kill 27;
28      kill 28;


Answer 19:

你可以使用命令SP_WHO并杀死使用您的数据库,然后重命名你的数据库中的所有过程。



文章来源: How do you kill all current connections to a SQL Server 2005 database?