使SQL Server数据库脱机时的极限等待时间

时间:2009-04-30 17:53:15

标签: database sql-server-2005 performance

我正在尝试在我的开发人员数据库上执行一些离线维护(从实时备份中恢复数据库),但是通过SQL Server Management Studio执行“脱机”命令正在慢慢执行 - 启用现在加30分钟的顺序。我只是在我的智慧结束,我似乎无法在网上找到任何可能导致速度问题,或如何解决它的参考。

有些网站建议与数据库的开放连接导致这种速度减慢,但使用此数据库的唯一应用程序是我的开发机器的IIS实例,并且服务已停止 - 没有更多的打开连接。

可能导致这种放缓的原因,我该怎么做才能加快速度?

17 个答案:

答案 0 :(得分:395)

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

ALTER DATABASE <dbname> SET OFFLINE WITH ROLLBACK IMMEDIATE

(更新)

如果仍然因以下错误而失败,您可以将其修改为this blog post

的启发
  

ALTER DATABASE失败,因为无法将锁定放在数据库'dbname'以后再试。

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

EXEC sp_who2

并使用您在以下命令中找到的SPID

KILL <SPID>

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

答案 1 :(得分:125)

很可能从某个地方连接到数据库(一个罕见的例子:asynchronous statistic update

要查找连接,请使用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

答案 2 :(得分:28)

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

将其置于单用户模式,然后重试。

答案 3 :(得分:17)

就我而言,在等待完成之后,我没有耐心,只是关闭了管理工作室。在退出之前,它显示了成功消息,db已脱机。这些文件可以重命名。

答案 4 :(得分:6)

执行存储过程 sp_who2

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

答案 5 :(得分:5)

在SSMS中:右键单击SQL Server图标,Activity Monitor。开放流程。找到已处理的已连接。右键单击该过程,Kill。

答案 6 :(得分:4)

任何时候遇到这种类型的事情,你应该总是想到你的事务日志。具有rollback immediate的alter db statment表明情况就是如此。看看这个:http://msdn.microsoft.com/en-us/library/ms189085.aspx

确定检查点等等。您需要确定日志中的事务是否值得保存,然后选择模式以相应地运行数据库。你没有理由等待,也没有理由让你丢失数据 - 你可以同时拥有两者。

答案 7 :(得分:2)

为了解决这个问题,我停止了在IIS中连接到数据库的网站,并立即将“冻结”“脱机数据库”面板解冻。

答案 8 :(得分:2)

关闭发出请求的SSMS(SQL Service Manager)实例解决了我的问题......

答案 9 :(得分:2)

在我的情况下,我在执行此操作之前查看了数据库中的一些表。我的用户帐户在SSMS中与此DB保持活动连接。一旦我在SSMS中与服务器断开连接(打开“Take database offline”对话框),操作就成功了。

答案 10 :(得分:1)

我尝试了以下所有建议,但无济于事。

  1. EXEC sp_who
  2. 杀死

  3. 具有立即回滚功能的ALTER DATABASE SET SINGLE_USER

    具有立即回滚功能的ALTER DATABASE SET OFFLINE

    结果:以上两个命令也都卡住了。

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

结果:窗口卡在执行中。

作为最后的选择,我从配置管理器重新启动了SQL Server服务,然后运行了ALTER DATABASE SET OFFLINE WITH ROLLBACK IMMEDIATE。就像魅力一样

答案 11 :(得分:1)

在SSMS中,将数据库设置为只读,然后再返回。连接将被关闭,从而释放锁。

在我的案例中,有一个网站与数据库有开放的连接。这种方法很简单:

  1. 右键单击数据库 - &gt;属性 - &gt;选项
  2. Database Read-Only设为True
  3. 在对话框中单击“是”警告SQL Server将关闭与数据库的所有连接。
  4. 重新打开选项并关闭只读
  5. 现在尝试重命名数据库或使其脱机。

答案 12 :(得分:1)

此外,关闭所有可能已打开的查询窗口,这些窗口已连接到相关数据库;)

答案 13 :(得分:0)

就我而言,数据库与旧的Sharepoint安装有关。在服务器管理器中停止和禁用相关服务&#34; unhung&#34;离线行动,已经运行了40分钟,并立即完成。

您可能希望检查当前是否有任何服务正在使用该数据库。

答案 14 :(得分:0)

在我的情况下,我停止了Tomcat服务器。然后数据库立即脱机。

答案 15 :(得分:0)

下次,请记住从“脱机”对话框中选中“丢弃所有活动连接”复选框。我也在没有连接的本地计算机上使用SQL_EXPRESS,但是除非我选中该复选框,否则这种减速会发生在我身上。

答案 16 :(得分:0)

对我来说,我只需要进入Job Activity Monitor并停止处理两件事。然后它立即下线。在我的情况下,虽然我知道这两个过程是什么,并且可以阻止它们。