当恢复备份,我怎么断开所有活动连接?(When restoring a backup, how do

2019-06-26 08:46发布

我的SQL Server 2005不恢复,因为活动连接的备份。 我怎样才能迫使它?

Answer 1:

SQL Server Management Studio中2005

当你在数据库上点击鼠标右键,单击Tasks ,然后单击Detach Database ,它带来了活动的连接的对话框。

通过点击在“消息”的超级链接,你可以杀死活动连接。

然后,您可以杀死那些连接,无需分离数据库。

更多信息这里 。

SQL Server Management Studio中2008

接口已经改变了SQL Server Management Studio中2008年,这里的步骤(通过: 添亮 )

  1. 右键单击对象资源管理器的服务器,然后选择“活动监视器”。
  2. 当此打开后,展开进程组。
  3. 现在使用下拉筛选由数据库名称的结果。
  4. 杀死通过选择右键单击“终止进程”选项的服务器连接。


Answer 2:

你想设置你的数据库为单用户模式,请在恢复,然后将其设置回多用户:

ALTER DATABASE YourDB
SET SINGLE_USER WITH
ROLLBACK AFTER 60 --this will give your current connections 60 seconds to complete

--Do Actual Restore
RESTORE DATABASE YourDB
FROM DISK = 'D:\BackUp\YourBaackUpFile.bak'
WITH MOVE 'YourMDFLogicalName' TO 'D:\Data\YourMDFFile.mdf',
MOVE 'YourLDFLogicalName' TO 'D:\Data\YourLDFFile.ldf'

/*If there is no error in statement before database will be in multiuser
mode.  If error occurs please execute following command it will convert
database in multi user.*/
ALTER DATABASE YourDB SET MULTI_USER
GO

参考:皮纳尔戴夫( http://blog.SQLAuthority.com )

官方参考: https://msdn.microsoft.com/en-us/library/ms345598.aspx



Answer 3:

此代码工作对我来说,它可以杀死一个数据库的所有现有连接。 你所要做的就是改变集@dbname =“的databaseName”所以它有你的数据库名称就行了。

Use Master
Go

Declare @dbname sysname

Set @dbname = 'databaseName'

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服务器将断开用户连接。 我发现最简单的方法 - 也不错,如果你想在服务器脱机。

但是,对于一些很奇怪的原因,“脱机”选项不这样做可靠,可以挂或混淆的管理控制台。 然后重新启动以脱机工作

有时候,这是一种选择 - 举例来说如果你已经停止网络服务器是连接的源。



Answer 5:

试试这个 ...

DECLARE UserCursor CURSOR LOCAL FAST_FORWARD FOR
SELECT
    spid
FROM
    master.dbo.sysprocesses
WHERE DB_NAME(dbid) = 'dbname'--replace the dbname with your database
DECLARE @spid SMALLINT
DECLARE @SQLCommand VARCHAR(300)
OPEN UserCursor
FETCH NEXT FROM UserCursor INTO
    @spid
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @SQLCommand = 'KILL ' + CAST(@spid AS VARCHAR)
    EXECUTE(@SQLCommand)
    FETCH NEXT FROM UserCursor INTO
        @spid
END
CLOSE UserCursor
DEALLOCATE UserCursor
GO


Answer 6:

这些都不是为我工作,不能删除或断开当前用户。 也看不到到数据库的任何活动连接。 重新启动SQL服务器(右键单击并选择重新启动),让我这样做。



Answer 7:

要添加到的意见已给出,如果您有通过使用DB IIS中运行的Web应用程序,你可能还需要在你恢复停止 (不回收)的应用程序池的应用程序,然后重新启动。 停止应用程序池杀死了积极的HTTP连接,并且不允许任何更多的,否则可能最终允许进程触发连接并由此锁定该数据库。 例如,这是用一把umbraco内容管理系统中的已知问题,恢复其数据库时



Answer 8:

我碰到这个问题跑,同时自动在SQL Server 2008中我的(全成)的方法还原proccess是两个提供答案的混合。

首先,我说整个数据库的所有连接运行,并杀死他们。

DECLARE @SPID int = (SELECT TOP 1 SPID FROM sys.sysprocess WHERE dbid = db_id('dbName'))
While @spid Is Not Null
Begin
        Execute ('Kill ' + @spid)
        Select @spid = top 1 spid from master.dbo.sysprocesses
        where dbid = db_id('dbName')
End

然后,我将数据库设置为SINGLE_USER模式

ALTER DATABASE dbName SET SINGLE_USER

然后,我运行恢复...

RESTORE DATABASE and whatnot

再次杀死连接

(same query as above)

并设置数据库恢复到MULTI_USER。

ALTER DATABASE dbName SET MULTI_USER

这样一来,我保证没有举起设置为单一模式之前的数据库,以后如果有前将冻结连接。



Answer 9:

以上都不是为我工作。 我的数据库没有显示使用活动监视器或sp_who的任何活动连接。 我最终不得不:

  • 右键单击数据库节点
  • 选择“分离...”
  • 选中“删除连接”框
  • 重新连接

没有最完美的解决方案,但它的工作原理,它不需要重新启动SQL服务器(不是我的选择,因为DB服务器承载很多其他的数据库)



Answer 10:

我喜欢做这样的,

改变数据库回滚立即设置为脱机

然后还原数据库。 之后,

改变数据库回滚即时在线设置



文章来源: When restoring a backup, how do I disconnect all active connections?