我试图在我的开发数据库上执行一些离线维护(从实时备份恢复开发数据库),但是通过SQL Server Management Studio执行的“脱机”命令执行得非常慢——大约30分钟以上。我只是在我的智慧的尽头,我似乎找不到任何参考网上可能导致速度问题,或如何解决它。

一些站点建议,打开到数据库的连接会导致这种放缓,但使用此数据库的唯一应用程序是我的开发机器的IIS实例,并且服务已停止—没有更多打开的连接。

是什么导致了这种减速,我能做些什么来加速它?


当前回答

以我为例,在等待了这么久之后,我没有耐心,干脆关闭了管理工作室。退出前,显示成功消息,db is offline。可以重命名这些文件。

其他回答

此外,关闭您可能打开的连接到相关数据库的任何查询窗口;)

在SSMS中:右键单击SQL server图标,Activity Monitor。开放的过程。找到被处理的连接。右键单击进程,Kill。

任何时候遇到这种情况,您都应该考虑您的事务日志。带有rollback immediate的alter db语句表明是这种情况。看看这个:http://msdn.microsoft.com/en-us/library/ms189085.aspx

钻研检查点等等。您需要决定日志中的事务是否值得保存,然后选择相应的模式来运行数据库。真的没有理由让你不得不等待,但也没有理由让你失去数据——你可以两者兼得。

经过一些额外的搜索(受到gbn的答案和u07ch对KMike答案的评论启发的新搜索词),我发现了这个,在2秒内成功完成:

ALTER DATABASE <dbname> SET OFFLINE WITH ROLLBACK IMMEDIATE

(更新)

当仍然出现以下错误时,您可以根据这篇博客文章的启发进行修复:

ALTER DATABASE失败,因为无法在数据库'dbname'上放置锁。

您可以运行以下命令来找出谁在锁定您的数据库:

EXEC sp_who2

并使用你在以下命令中找到的任何SPID:

KILL <SPID>

然后再次运行ALTER DATABASE命令。现在应该可以工作了。

执行存储过程 sp_who2

这将允许您查看是否有任何阻塞锁..杀死他们应该修复它。