由于不止一个人在干涉数据库,我们已经丢失了我们的事务日志文件,因此丢失了数据库。 幸运的是,我们的MDF文件仍然完好无损,我们并不担心丢失的交易,因为它们只是“删除”交易。
我做了一些研究,发现sp_attach_single_file_db命令几乎是为了这个目的,而sql server在文件被删除之前已经closures了。 我用这个命令:
EXEC sp_attach_single_file_db @dbname = 'RecoveredDatabase', @PhysName = 'E:\SQL Data\AerationBasinsTrend_data.mdf'
其中'RecoveredDatabase'是我的新数据库,'E:\ SQL DATA \ AerationBasinsTrend_Data.mdf'是phyiscal .mdf文件。 我运行这个时出现错误。 服务器报告这一点:
服务器:消息1813年,级别16,状态2,行1
- 使用亚马逊EBS来存储您的数据库。 并增加存储空间!
- 不确定SQL Server 2008 Express是否升级到Web Edition
- MySQL查询,2个类似的服务器,执行时间差2分钟
- 为PHP安装PDO_DBLIB
- SQL Server 2008 R2 +创build新的实例
无法打开新数据库“RecoveredDatabase”。 CREATE DATABASE被中止。
设备激活错误。 物理文件名“E:\ SQL Data \ AerationBasinsTrend_Log.LDF”可能不正确。
设备激活错误。 物理文件名称“C:\ SQL备份\ TransLog”可能不正确。
据我所知,这个命令应该创build一个新的ldf文件,如果旧的不存在。 我错过了什么?
你可以试试这个:
使用相同的名称和相同的MDF和LDF文件创build一个新的数据库
停止sql服务器并将现有的MDF重命名为新的MDF,并将原始MDF复制到此位置并删除LDF文件。
启动SQL Server
现在你的数据库将被标记为可疑
更新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
重新启动sql服务器。 现在数据库将处于紧急模式
现在执行未logging的DBCC来创build一个日志文件
DBCC REBUILD_LOG(dbname,'c:\ dbname.ldf') – 未logging的步骤来创build一个新的日志文件。
(根据您的要求replace数据库名称和日志文件名称)
执行sp_resetstatus
重新启动SQL Server并查看数据库处于联机状态。
资源