我的SQL Server 2005不恢复,因为活动连接的备份。 我怎样才能迫使它?
Answer 1:
SQL Server Management Studio中2005
当你在数据库上点击鼠标右键,单击Tasks
,然后单击Detach Database
,它带来了活动的连接的对话框。
通过点击在“消息”的超级链接,你可以杀死活动连接。
然后,您可以杀死那些连接,无需分离数据库。
更多信息这里 。
SQL Server Management Studio中2008
接口已经改变了SQL Server Management Studio中2008年,这里的步骤(通过: 添亮 )
- 右键单击对象资源管理器的服务器,然后选择“活动监视器”。
- 当此打开后,展开进程组。
- 现在使用下拉筛选由数据库名称的结果。
- 杀死通过选择右键单击“终止进程”选项的服务器连接。
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:
我喜欢做这样的,
改变数据库回滚立即设置为脱机
然后还原数据库。 之后,
改变数据库回滚即时在线设置