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

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

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


当前回答

在我的情况下,我停止Tomcat服务器。然后DB立刻离线了。

其他回答

为了解决这个问题,我停止了在IIS中连接到db的网站,立即“冻结”“使db离线”面板解冻。

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

ALTER DATABASE <dbname> SET OFFLINE WITH ROLLBACK IMMEDIATE

(更新)

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

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

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

EXEC sp_who2

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

KILL <SPID>

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

您是否有任何连接到此DB的打开的SQL Server Management Studio窗口?

将其置于单用户模式,然后再试一次。

在我的情况下,在执行这个操作之前,我已经在DB中查看了一些表。我的用户帐户持有到SSMS中此DB的活动连接。一旦我从SSMS中的服务器断开连接(使“使数据库脱机”对话框打开),操作成功。

我尝试了下面所有的建议,但都没用。

EXEC sp_who Kill < SPID > 将数据库设置为SINGLE_USER,并立即回滚 使用立即回滚脱机更改数据库设置 结果:上面的两个命令都被卡住了。

4所示。右键单击数据库-> Properties -> Options “数据库只读”设置为“True” 在弹出的对话框中单击“是”,警告SQL Server将关闭与数据库的所有连接。

结果:窗口在执行时卡住。

作为最后的手段,我从配置管理器中重新启动SQL server服务,然后运行ALTER DATABASE SET OFFLINE WITH ROLLBACK IMMEDIATE。这招很管用