51

我想关闭与 MS SQL Server 的现有连接,以便我可以通过编程方式对该数据库进行恢复。

4

7 回答 7

87

这应该断开其他所有人的连接,并让您成为唯一的用户:

alter database YourDb set single_user with rollback immediate

注意:不要忘记

alter database YourDb set MULTI_USER

完成后!

于 2012-04-30T17:47:23.420 回答
16

还原向导中单击“关闭与目标数据库的现有连接”

分离数据库向导中单击“删除连接”项。

于 2015-02-28T08:45:42.600 回答
6

在这里找到它:http: //awesomesql.wordpress.com/2010/02/08/script-to-drop-all-connections-to-a-database/

DECLARE @dbname NVARCHAR(128)
SET @dbname = 'DB name here'
 -- db to drop connections 
DECLARE @processid INT 
SELECT  @processid = MIN(spid)
FROM    master.dbo.sysprocesses
WHERE   dbid = DB_ID(@dbname) 
WHILE @processid IS NOT NULL 
    BEGIN 
        EXEC ('KILL ' + @processid) 
        SELECT  @processid = MIN(spid)
        FROM    master.dbo.sysprocesses
        WHERE   dbid = DB_ID(@dbname) 
    END
于 2012-04-30T17:42:34.887 回答
3

您可以像这样使用光标:

USE master
GO

DECLARE @SQL AS VARCHAR(255)
DECLARE @SPID AS SMALLINT
DECLARE @Database AS VARCHAR(500)
SET @Database = 'AdventureWorks2016CTP3'

DECLARE Murderer CURSOR FOR
SELECT spid FROM sys.sysprocesses WHERE DB_NAME(dbid) = @Database

OPEN Murderer

FETCH NEXT FROM Murderer INTO @SPID
WHILE @@FETCH_STATUS = 0

    BEGIN
    SET @SQL = 'Kill ' + CAST(@SPID AS VARCHAR(10)) + ';'
    EXEC (@SQL)
    PRINT  ' Process ' + CAST(@SPID AS VARCHAR(10)) +' has been killed'
    FETCH NEXT FROM Murderer INTO @SPID
    END 

CLOSE Murderer
DEALLOCATE Murderer

我在我的博客中写到:http: //www.pigeonsql.com/single-post/2016/12/13/Kill-all-connections-on-DB-by-Cursor

于 2017-01-07T13:28:06.027 回答
2

简短的回答:

您只能在“数据库上下文>>还原向导”中获得“关闭与目标数据库的现有连接”选项,而不是在任何特定数据库的上下文中

长答案:

Right Click在您的服务器名称下的数据库上,如下所示:

并从中选择选项:“还原数据库... ”。

D b

在“还原数据库”向导中,

  1. 选择要恢复的数据库之一
  2. 在左侧垂直菜单中,单击“选项

db1

在这里您可以找到“关闭与目标数据库的现有连接”的复选框

数据库3

只需检查它,您就可以继续进行还原操作。

完成还原后,它将自动恢复所有连接。

于 2018-11-01T06:05:50.807 回答
1

Stev.org 提供的完美解决方案:http: //www.stev.org/post/2011/03/01/MS-SQL-Kill-connections-by-host.aspx

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[KillConnectionsHost]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[KillConnectionsHost]
GO


/****** Object:  StoredProcedure [dbo].[KillConnectionsHost]    Script Date: 10/26/2012 13:59:39 ******/

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[KillConnectionsHost] @hostname varchar(MAX)
AS
    DECLARE @spid int
    DECLARE @sql varchar(MAX)

    DECLARE cur CURSOR FOR
        SELECT spid FROM sys.sysprocesses P
            JOIN sys.sysdatabases D ON (D.dbid = P.dbid)
            JOIN sys.sysusers U ON (P.uid = U.uid)
            WHERE hostname = @hostname AND hostname != ''
            AND P.spid != @@SPID

    OPEN cur

    FETCH NEXT FROM cur
        INTO @spid

    WHILE @@FETCH_STATUS = 0
    BEGIN
        PRINT CONVERT(varchar, @spid)

        SET @sql = 'KILL ' + RTRIM(@spid)
        PRINT @sql
        EXEC(@sql)

        FETCH NEXT FROM cur
            INTO @spid
    END

    CLOSE cur
    DEALLOCATE cur
GO
于 2012-10-26T18:05:12.820 回答
0

在最新版本的 SQL Server Management Studio 中,您现在可以右键单击数据库并“使数据库脱机”。这使您可以选择删除与数据库的所有活动连接。

于 2020-12-16T09:18:19.200 回答