如何修复SQL Server数据库中的“恢复挂起”状态?
执行以下查询集:
ALTER DATABASE [DBName] SET EMERGENCY;
GO
ALTER DATABASE [DBName] set single_user
GO
DBCC CHECKDB ([DBName], REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS;
GO
ALTER DATABASE [DBName] set multi_user
GO
了解更多信息: https://www.stellarinfo.com/blog/fix-sql-database-recovery-pending-state-issue/
当您的数据库.mdf文件名被重命名时,会出现此问题。解决方法:
在服务中重新启动SQL EXPRESS,即可解决挂起的问题。
在我们的情况下,它是由于磁盘驱动器空间不足引起的。我们删除了一些垃圾以释放空间,然后通过停止并重新启动SQL Server服务来解决“恢复挂起”的问题。
分离、重新连接,问题解决!
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'
这可能是由于数据库文件夹权限不足引起的(在我的情况下是由于域迁移)。
只需为 SQL 服务帐户授予该文件夹的访问权限即可。
在使用SQL Management Studio时,当用户更改数据库名称时,有时会出现间歇性问题,此时SQL Server有可能会将同一DB文件用于两个不同的数据库。如果SQL Server处于这种状态,则如果您尝试Mahesh的答案,则可能会看到以下错误:
"由于正在被另一个进程使用,因此无法访问该文件的进程"
要解决此问题:
背景(在我的特定情况下): 我在本地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上似乎支持这一点。
我正在使用Azure,MDF和日志文件位于不同的磁盘上,并且没有将该磁盘附加到它无法找到文件的磁盘,因此文件处于恢复挂起状态。