如何修复SQL Server数据库中的“恢复挂起”状态?

60

如何修复SQL Server数据库中的“恢复挂起”状态?

9个回答

105

此外,如果数据库经常使用,请确保通过SQL Server Management Studio将Auto_Close关闭或设置为False。如果启用了Auto_Close,则生产数据库会更容易陷入“恢复挂起状态”。[链接](https://www.brentozar.com/blitz/auto-close-enabled/) - Deano
这对我起作用了,但是我不得不重新启动我的实例,此时数据库进入恢复模式并成功恢复。 - squillman
我在本地开发的 Sql Server 实例上遇到了这个问题。运行查询非常缓慢,但将可用于 Sql Server 的内存增加到 2GB+ 可以使该过程更快。 - SSS

28

当您的数据库.mdf文件名被重命名时,会出现此问题。解决方法:

在服务中重新启动SQL EXPRESS,即可解决挂起的问题。


对于常规的Sql Server,这对我很有效! - TheDudeAbides
并非所有情况下都是如此。 - undefined

7

在我们的情况下,它是由于磁盘驱动器空间不足引起的。我们删除了一些垃圾以释放空间,然后通过停止并重新启动SQL Server服务来解决“恢复挂起”的问题。


1
这对我在克隆驱动器并将其全部移动到另一台服务器时非常有帮助。由于驱动器是当时状态的精确副本,并且我最初引入了驱动器字母不匹配的问题,因此出现了“挂起”问题。在 SSMS 打开的同时重新启动服务,然后刷新即可解决。 - Tim F.

3

分离、重新连接,问题解决!

ALTER DATABASE MyDatabase SET EMERGENCY;
EXEC sp_detach_db MyDatabase
EXEC sp_attach_single_file_db @DBName = MyDatabase, @physname = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\MyDatabase.mdf'

太棒了!它为我工作了。防止整个服务器崩溃。 - Sting

2

这可能是由于数据库文件夹权限不足引起的(在我的情况下是由于域迁移)。

只需为 SQL 服务帐户授予该文件夹的访问权限即可。


1
我不得不再次接管文件夹和mdf文件,然后将NT Service\MSSQLSERVER添加到包含mdf文件和文件的文件夹中。 - undefined

0

在使用SQL Management Studio时,当用户更改数据库名称时,有时会出现间歇性问题,此时SQL Server有可能会将同一DB文件用于两个不同的数据库。如果SQL Server处于这种状态,则如果您尝试Mahesh的答案,则可能会看到以下错误:

"由于正在被另一个进程使用,因此无法访问该文件的进程"

要解决此问题:

  1. 从服务控制台MMC停止MSSQLServer服务
  2. 重命名DB和Log文件(数据库属性->文件)
  3. 在SQL Management Studio的对象资源管理器窗口中,刷新“数据库文件夹”,如果您看到另一个显示为“恢复挂起状态”的数据库节点(除了您正在尝试纠正此问题的节点之外),则继续执行下一步。如果您没有看到此错误,则需要尝试其他方法来解决此问题
  4. 备份步骤3中新的有问题节点的DB和Log文件,并小心地删除数据库
  5. 恢复在步骤2中更改的Db文件名
  6. 现在从服务控制台启动MSSQLServer服务
  7. 重新尝试Mahesh的答案中的步骤

0
确保“SQL Server(201x)”服务的“登录”帐户(在Windows服务(管理器)中列出)具有足够的权限。您可以尝试将其更改为另一个登录名。在我的情况下,将其从“此帐户”更改为“本地系统帐户”,重新启动“SQL Server(xxxx)”服务和SQL Server Management Studio(SSMS),然后再次登录SSMS即可解决问题。

背景(在我的特定情况下) 我在本地PC上运行了3个不同版本的SQL(2008r2、2012和2014),并且正在忙于将一个文件夹(后来发现其中包含一些SQL数据和日志数据库文件)移动到另一台PC。在中途,我停止了服务(管理器)中的SQL服务,希望文件能够顺利移动 - 因为它们现在不再使用。我意识到需要确认SQL中的数据库名称和文件位置(以便在新PC上重新设置它们),因此我将SQL数据和日志文件复制回原始位置。重启PC后,各种实例上的大多数数据库都显示为“恢复挂起”在SSMS中。首先尝试了stellarinfo的程序(由@Mahesh Thorat在这里列出的答案)对两个数据库进行操作,但仍然没有任何运气,SQL SERVER – Where is ERRORLOG? Various Ways to Find ERRORLOG Location Pinal Dave's SQL Authority网站上的文章和Operating System error 5(Access is Denied) SQL Server Central上的文章给了我一个想法,即在查看SQL Errorlog并找到“操作系统错误5:”5(拒绝访问)“后,可能与权限有关。另一篇文章Msg 3201, Level 16 Cannot open backup device. Operating system error 5(Access is denied.)在SqlBak Blog上似乎支持这一点。


0
在我的情况下,这影响了高可用性 SQL Server 集群中的辅助服务器。主服务器正在进行“同步”,但辅助服务器处于“恢复挂起”状态。
在检查了“cluadmin.msc”后,发现集群中的辅助服务器不健康。然后确定在 Windows 更新强制重新启动后,第二个集群框上的“群集服务”未能启动(可能是因为文件共享见证人在同一时间进行了类似的 Windows 更新而重新启动)。
启动“群集服务”将数据库带回“同步”状态。

0

我正在使用Azure,MDF和日志文件位于不同的磁盘上,并且没有将该磁盘附加到它无法找到文件的磁盘,因此文件处于恢复挂起状态。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接