将SQL Server数据库脱机的极度等待时间

我试图在我的开发数据库上执行一些脱机维护(从活动备份开始数据库恢复),但是通过SQL Server Management Studio执行的“脱机”命令的执行速度非常慢,大约在30分钟以上。 我只是在我的智慧结束,我似乎无法find任何网上提到什么可能会导致速度问题,或如何解决它。

一些网站build议开放连接到数据库导致这种放缓,但使用这个数据库的唯一应用程序是我的开发机器的IIS实例,服务停止 – 没有更多的开放连接。

有什么可能导致这种放缓,我能做些什么来加速呢?

经过一些额外的search(由gbn的答案启发的新search条款和u07ch评论KMike的答案),我发现这个,在2秒内成功完成:

ALTER DATABASE <dbname> SET OFFLINE WITH ROLLBACK IMMEDIATE 

(更新)

当这仍然失败并出现以下错误时,您可以按照本博客文章的启发修复它:

ALTER DATABASE因数据库'dbname'无法locking而失败请稍后重试。

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

 EXEC sp_who2 

并使用您在以下命令中find的任何SPID

 KILL <SPID> 

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

很有可能从某处连接到数据库(一个罕见的例子: asynchronous统计更新 )

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

把它放在单用户模式,然后再试一次。

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

在SSMS中:右键单击SQL服务器图标,活动监视器。 打开进程。 find已处理的连接。 用鼠标右键单击该进程,Kill。

任何时候遇到这种types的事情,你总是应该考虑你的事务日志。 带有回滚立即数的alter db statment指出了这种情况。 看看这个: http : //msdn.microsoft.com/en-us/library/ms189085.aspx

在检查站等等。你需要决定你的日志中的事务是否值得保存,然后select相应的模式来运行你的数据库。 你真的没有理由不得不等待,也没有理由丢失数据 – 你可以有两个。

执行存储过程sp_who2

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

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

closures从中请求的SSMS(SQL服务pipe理器)的实例解决了我的问题…..

另外,closures所有连接到相关数据库的查询窗口;)

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

在我的情况下,有一个网站有开放的连接到数据库。 这个方法很简单:

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

对我来说,我只需要进入工作活动监视器,并停止正在处理的两件事情。 然后立即下线。 在我的情况下,虽然我知道这两个过程是什么,可以阻止他们。

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

就我而言,数据库与旧的Sharepoint安装有关。 停止和禁用服务器pipe理器中的相关服务“解除”已经运行了40分钟的离线操作,并立即完成。

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

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