我试图对我的开发数据库进行离线维护(从实时备份恢复),但是SQL Server Management Studio的“下线”命令速度极慢,目前已经超过30分钟。我快要崩溃了,似乎找不到任何在线参考来解决速度问题。
一些网站建议说,打开的数据库连接会导致此减速,但是使用此数据库的唯一应用程序是我的开发机器的IIS实例,并且服务已停止-没有更多的打开连接。
是什么原因导致这种减速,我该怎么做才能加快它?
我试图对我的开发数据库进行离线维护(从实时备份恢复),但是SQL Server Management Studio的“下线”命令速度极慢,目前已经超过30分钟。我快要崩溃了,似乎找不到任何在线参考来解决速度问题。
一些网站建议说,打开的数据库连接会导致此减速,但是使用此数据库的唯一应用程序是我的开发机器的IIS实例,并且服务已停止-没有更多的打开连接。
是什么原因导致这种减速,我该怎么做才能加快它?
在进一步搜索之后(由于gbn的回答和u07ch对KMike答案的评论,我得到了新的搜索词),我找到了这个,在2秒内成功完成:
ALTER DATABASE <dbname> SET OFFLINE WITH ROLLBACK IMMEDIATE
如果出现以下错误,你可以根据这篇博客文章的启示来修复它:
由于无法在数据库'数据库名'上放置锁定,因此ALTER DATABASE操作失败。请稍后重试。
你可以运行以下命令来查找是哪个进程正在锁定你的数据库:
EXEC sp_who2
并使用以下命令中找到的任何SPID
:
KILL <SPID>
然后再运行ALTER DATABASE
命令,现在应该可以正常工作了。
很可能有某个地方与数据库存在连接(罕见的例子:异步统计更新)
要查找连接,请使用sys.sysprocesses
USE master
SELECT * FROM sys.sysprocesses WHERE dbid = DB_ID('MyDB')
为了强制断开连接,请使用ROLLBACK IMMEDIATE
USE master
ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
您有任何已连接到此数据库的开放SQL Server Management Studio窗口吗?
将其置于单用户模式,然后再次尝试。
在我的情况下,等待太久没有耐心,直接关闭了管理工具。退出之前,它显示了成功消息,并使数据库脱机。文件可供重命名。
执行存储过程 sp_who2。
这将允许您查看是否有任何阻塞锁定。杀掉它们可以解决问题。
在SSMS中:右键单击SQL服务器图标,选择“活动监视器”,打开“进程”选项卡。找到已连接的进程,右键单击该进程,选择“终止”。