SQL Server 2000 - 使用 sp_attach_single_file_db 恢复 .MDF 失败并出现错误

SQL Server 2000 - 使用 sp_attach_single_file_db 恢复 .MDF 失败并出现错误

由于不止一个人干预了数据库,我们丢失了事务日志文件,从而丢失了数据库。幸运的是,我们的 MDF 文件仍然完好无损,我们并不担心丢失的事务,因为它们只是“删除”事务。

我做了一些研究,发现 sp_attach_single_file_db 命令非常适合此用途,并且在删除文件之前 SQL 服务器已关闭。我使用了这个命令:

EXEC sp_attach_single_file_db @dbname = 'RecoveredDatabase',
@PhysName = 'E:\SQL Data\AerationBasinsTrend_data.mdf'

其中“RecoveredDatabase”是我的新数据库,“E:\SQL DATA\AerationBasinsTrend_Data.mdf”是物理 .mdf 文件。运行此程序时出现错误。服务器报告以下内容:

服务器:消息 1813,级别 16,状态 2,第 1 行

无法打开新数据库“RecoveredDatabase”。CREATE DATABASE 已中止。

设备激活错误。物理文件名“E:\SQL Data\AerationBasinsTrend_Log.LDF”可能不正确。

设备激活错误。物理文件名“C:\SQL Backup\TransLog”可能不正确。

据我所知,如果旧 ldf 文件不存在,此命令应该会创建一个新的 ldf 文件。我遗漏了什么?

答案1

你可以尝试一下:

  1. 创建具有相同名称和相同 MDF 和 LDF 文件的新数据库

  2. 停止 SQL 服务器并将现有 MDF 重命名为新 MDF,然后将原始 MDF 复制到此位置并删除 LDF 文件。

  3. 启动 SQL Server

  4. 现在你的数据库将被标记为可疑

  5. 更新 sysdatabases 以更新为紧急模式。这将不会在启动时使用日志文件

Sp_configure "allow updates", 1
go
Reconfigure with override
GO
Update sysdatabases set status = 32768 where name = "BadDbName"
go
Sp_configure "allow updates", 0
go
Reconfigure with override
GO
  1. 重新启动 SQL Server。现在数据库将处于紧急模式

  2. 现在执行未记录的 DBCC 来创建日志文件

DBCC REBUILD_LOG(dbname,'c:\dbname.ldf') —— 创建新日志文件的未记录步骤。

(根据您的要求替换数据库名称和日志文件名)

  1. 执行 sp_resetstatus

  2. 重新启动SQL服务器并查看数据库是否在线。

来源

相关内容