我们将 mdf 和 ldf 文件保存在物理机的单独驱动器上。构成 ldf 文件驱动器的其中一个磁盘出现故障。一些在该驱动器上有其 ldfs 的数据库现在处于“恢复挂起”状态。
它不是生产环境,所以一些数据丢失是可以接受的,但丢失整个数据库是不可接受的。目前从备份中恢复不是一个可行的选择。
我尝试过了:
1)分离数据库,但出现以下错误:
文件激活失败。物理文件名“D:\LDFfiles\DatabaseName.ldf”可能不正确。无法重建日志,因为数据库关闭时有打开的事务/用户,数据库没有发生检查点,或者数据库是只读的。如果事务日志文件因硬件或环境故障而被手动删除或丢失,则可能会发生此错误。
消息 5181,级别 16,状态 5,第 1 行无法重新启动数据库“DatabaseName”。恢复到以前的状态。
消息 5069,级别 16,状态 1,第 1 行 ALTER DATABASE 语句失败。
消息 823,级别 24,状态 2,第 1 行操作系统在读取文件“D:\LDFfiles\DatabaseName.ldf”中的偏移量 0000000000000000 时向 SQL Server 返回错误 2(系统找不到指定的文件。)。SQL Server 错误日志和系统事件日志中的其他消息可能会提供更多详细信息。这是威胁数据库完整性的严重系统级错误情况,必须立即更正。完成完整的数据库一致性检查 (DBCC CHECKDB)。此错误可能由多种因素引起;有关详细信息,请参阅 SQL Server 联机丛书。
2)将它们联机,但出现以下错误:
你能告诉我恢复数据库的选择是什么吗?据我所知,mdf 文件是健康的,可以通过重建日志查询重复使用。主要问题是它目前是附加的。欢迎任何建议。
你有两个选择(如果从备份恢复不是一个选项),并且它们都需要连接数据库- 如果你的数据库没有连接,你的问题会更加严重(这就是 SQL Server 阻止你分离的原因. 幸运的是 - 旧版本并没有像这样照顾你。
您可以运行 CHECKDB 并允许数据丢失,或者您可以 ALTER DATABASE REBUILD LOG - 但是 REBUILD LOG 是不确定的,如果您的数据库无论如何都处于挂起恢复状态,则可能无法工作。
您需要运行 CHECKDB。语法如下:
警告:您将丢失数据,并且不能保证这一切。 阅读 Paul Randal 撰写的关于紧急模式修复的 SQL 技能帖子
假设: 日志文件所在的逻辑磁盘已被修复/恢复。
查询:为什么从备份中恢复不可行?在任何你甚至远程关心数据的环境中,总是有备份,因为从备份恢复通常总是解决此类问题的最简单方法。