如何解决因内存表文件丢失导致的数据库Recovery pending状态?
解决Recovery Pending状态的可行方案
别慌,既然那个丢失的In-Memory文件组里只有无价值的表,咱们可以通过以下步骤快速恢复数据库的可用性:
第一步:将数据库切换到紧急模式
因为当前数据库处于Recovery pending状态,SQL Server会阻止常规操作,先切换到紧急模式让我们能访问数据库:ALTER DATABASE [你的数据库名称] SET EMERGENCY;第二步:设置为单用户模式
避免其他连接干扰后续操作,设置为单用户模式并立即回滚未完成的事务:ALTER DATABASE [你的数据库名称] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;第三步:移除丢失的文件和文件组
既然对应的SSD文件已经被擦除,且里面的数据没用,直接移除这个文件和所属的文件组:-- 先移除文件 ALTER DATABASE [你的数据库名称] REMOVE FILE [你的In-Memory文件名]; -- 再移除文件组 ALTER DATABASE [你的数据库名称] REMOVE FILEGROUP [你的In-Memory文件组名];第四步:恢复数据库到正常状态
最后把数据库切回多用户模式并恢复在线状态:ALTER DATABASE [你的数据库名称] SET MULTI_USER; ALTER DATABASE [你的数据库名称] SET ONLINE;
注意事项
- 请务必确认你要移除的文件和文件组确实是那个存储在SSD上的In-Memory组件,别误删了其他有用的文件组。
- 操作完成后,数据库应该就能正常访问了,后续如果还需要使用In-Memory表,记得把文件创建在不会被自动擦除的存储介质上。
内容的提问来源于stack exchange,提问作者Vladislav Zalesak
相关产品推荐
相关产品推荐

