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

cra*_*boy 4 sql-server

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

我做了一些研究,发现 sp_attach_single_file_db 命令非常适合于此,并且在删除文件之前关闭了 sql server。我使用了这个命令:

EXEC sp_attach_single_file_db @dbname = 'RecoveredDatabase',
@PhysName = 'E:\SQL Data\AerationBasinsTrend_data.mdf'
Run Code Online (Sandbox Code Playgroud)

其中 'RecoveredDatabase' 是我的新数据库,'E:\SQL DATA\AerationBasinsTrend_Data.mdf' 是 phyiscal .mdf 文件。运行此程序时出现错误。服务器报告如下:

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

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

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

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

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

Hol*_*tic 5

你可以试试这个:

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

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

  3. 启动 SQL Server

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

  5. 更新 sysdatabases 以更新到紧急模式。这不会在启动时使用 LOG 文件

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
Run Code Online (Sandbox Code Playgroud)
  1. 重新启动sql server。现在数据库将处于紧急模式

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

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

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

  1. 执行 sp_resetstatus

  2. 重启SQL server,查看数据库在线。

来源