我正在尝试对我的开发数据库执行一些脱机维护(从实时备份还原开发数据库),但是通过SQL Server Management Studio进行的“脱机”命令执行速度非常慢-大约需要30分钟。我只是想尽办法,似乎无法在线找到有关可能导致速度问题或如何解决速度问题的任何参考。
一些站点建议打开与数据库的连接会导致此速度下降,但是使用此数据库的唯一应用程序是我的开发机的IIS实例,并且该服务已停止-没有更多打开的连接。
是什么导致这种速度下降,我该如何加快速度呢?
我正在尝试对我的开发数据库执行一些脱机维护(从实时备份还原开发数据库),但是通过SQL Server Management Studio进行的“脱机”命令执行速度非常慢-大约需要30分钟。我只是想尽办法,似乎无法在线找到有关可能导致速度问题或如何解决速度问题的任何参考。
一些站点建议打开与数据库的连接会导致此速度下降,但是使用此数据库的唯一应用程序是我的开发机的IIS实例,并且该服务已停止-没有更多打开的连接。
是什么导致这种速度下降,我该如何加快速度呢?
Answers:
经过一些额外的搜索(受gbn的答案和u07ch对KMike的答案的启发而启发的新搜索词),我发现了这一点,并在2秒内成功完成:
ALTER DATABASE <dbname> SET OFFLINE WITH ROLLBACK IMMEDIATE
如果仍然失败并出现以下错误,则可以按照此博客文章的建议进行修复:
ALTER DATABASE失败,因为无法在数据库'dbname'上放置锁。请稍后再试。
您可以运行以下命令来找出谁在锁定您的数据库:
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
ALTER DATABASE failed because a lock could not be placed on database
命令KILL <SPID>
会有所帮助
您是否有与此数据库连接的任何打开的SQL Server Management Studio窗口?
将其置于单用户模式,然后重试。
每当您遇到这种情况时,都应该始终想到事务日志。具有立即回滚的alter db语句表明是这种情况。检查一下:http : //msdn.microsoft.com/en-us/library/ms189085.aspx
加强检查点等。您需要确定日志中的事务是否值得保存,然后选择相应的模式来运行数据库。实际上,您没有理由必须等待,但也没有理由要丢失数据-您可以同时拥有两者。
我尝试了以下所有建议,但没有任何效果。
杀死<SPID>
带有立即回滚的ALTER DATABASE SET SINGLE_USER
具有立即回滚的ALTER DATABASE SET OFFLINE
结果:以上两个命令也都卡住了。
4。右键单击数据库->属性->选项,将数据库只读设置为True,在对话框中警告SQL Server将关闭与数据库的所有连接,然后单击“是”。
结果:窗口卡在执行中。
作为最后的选择,我从配置管理器中重新启动了SQL Server服务,然后运行ALTER DATABASE SET OFFLINE WITH ROLLBACK IMMEDIATE。它像魅力一样运作
下次,请记住从“脱机”对话框中选中“删除所有活动连接”复选框。我也在没有连接的本地计算机上使用SQL_EXPRESS,但是除非我选中该复选框,否则这种减速对我而言会发生。