SQL2008下只有一个mdf文件如何恢复数据库

时间:2022-11-25 13:20:36
一.这个库就是由1个mdf和1个ldf文件构成,ldf文件损坏;
二.我的解题思路按照网上通用通用的思路:
1、新建一个同名数据库。
2、停止数据库服务,覆盖新建的数据库主文件(小技巧:最好放在同一个磁盘里面,把新建的数据库主文件删掉或移开,再把要恢复的数据库主文件剪切过去,这样就可以节省时间。)
3、启动数据库服务,数据库变为置疑或可疑状态。然后在查询分析器中运行:
alter database 无日志文件的数据库名称 set emergency
设置为紧急状态。
4、再运行:
alter database 无日志文件的数据库名称 set single_user
或者:
Sp_dboption '无日志文件的数据库名称', 'single user', 'true'
设置为单用户模式。
、检查并重建日志文件,运行:
dbcc checkdb('无日志文件的数据库名称',REPAIR_ALLOW_DATA_LOSS)
这个时间比较长。耐心等待!如果有错误提示,再运行:
dbcc checkdb('无日志文件的数据库名称',REPAIR_REBUILD)
进行修复。如果没有错误,可以跳过。
6、恢复成多用户模式
alter database 无日志文件的数据库名称 set multi_user
或者:
Sp_dboption '无日志文件的数据库名称', 'single user', 'false'
但在执行第五步时就没法继续下去了,报“无法打开数据库 'newexam' 版本 655。请将该数据库升级为最新版本。”。这个方法应该是对SQL2000凑效,不知道为什么在SQL2008下就不行了,请高手们指教下,谢谢!ps:请不要随性copy网上的,要确认有效再说,因为我也是在网上找了很多没结果才在论坛上求助的,谢谢!

16 个解决方案

#1


你是把2008的库放到2000执行?

#2


版本655指的是SQL2008  ,如果你从2008分离出来的mdf/ldf,是不能直接附加到2000的。但是单纯在2008里面执行是没有问题的

#3


用附加的试下,看行不行

#4


引用 2 楼 DBA_Huangzj 的回复:
版本655指的是SQL2008  ,如果你从2008分离出来的mdf/ldf,是不能直接附加到2000的。但是单纯在2008里面执行是没有问题的

我的数据库服务器版本是10.50.1600.1 655,是2008R2的啊,mdf文件是考试时老师提供的。

#5


这个库就是由1个mdf和1个ldf文件构成,ldf文件损坏;
--> 删除或重命名ldf文件,
     然后附加数据库-->选择mdf文件-->在界面上会提示缺少ldf文件-->选择ldf文件-->点删除-->点确定.继续附加数据库,会自动创建一个新的ldf文件的.

#6


引用 5 楼 ap0405140 的回复:
这个库就是由1个mdf和1个ldf文件构成,ldf文件损坏;
--> 删除或重命名ldf文件,
     然后附加数据库-->选择mdf文件-->在界面上会提示缺少ldf文件-->选择ldf文件-->点删除-->点确定.继续附加数据库,会自动创建一个新的ldf文件的.

不行的,报错“
文件激活失败。物理文件名称'f:\newexam_1.ldf'可能不正确。
无法重新生成日志,原因是数据库关闭时存在打开的事务/用户,该数据库没有检查点或者该数据库是只读的。如果事务日志文件被手动删除或者由于硬件或环境问题而丢失,则可能出现此错误。
消息 1813,级别 16,状态 2,第 1 行
无法打开新数据库 'newexam'。CREATE DATABASE 中止。

#7


--SQL Server版本
SELECT  SERVERPROPERTY('productlevel') AS 'Service Pack' ,
        SERVERPROPERTY('edition') AS edition ,
        SERVERPROPERTY('productversion') AS 'build number'

执行一下看看,你1楼的报错是说你的sqlserver比mdf的版本还要低的意思

#8


参考  http://social.microsoft.com/Forums/zh-CN/86816bed-507e-44e6-a096-178eb685fcb0

当把数据库设置为应急恢复模式后一般就能读数据了,此时建个空数据库,把数据导出到新库里.
导出完成后,最终把这个问题库删除了吧.

#9


引用 7 楼 DBA_Huangzj 的回复:
--SQL Server版本
SELECT  SERVERPROPERTY('productlevel') AS 'Service Pack' ,
        SERVERPROPERTY('edition') AS edition ,
        SERVERPROPERTY('productversion') AS 'build number'

执行一下看看,你1楼的报错是说你的sqlserver比mdf的版本还要低的意思

感谢您的帮助,我在SQL2012恢复也报同样的错误,mdf是2008的,捉急

#10


引用 8 楼 ap0405140 的回复:
参考  http://social.microsoft.com/Forums/zh-CN/86816bed-507e-44e6-a096-178eb685fcb0

当把数据库设置为应急恢复模式后一般就能读数据了,此时建个空数据库,把数据导出到新库里.
导出完成后,最终把这个问题库删除了吧.

不行的,数据库为suspect时这招最好用,但在目前场合下不灵了

#11


引用 9 楼 shzhouhuiyu 的回复:
Quote: 引用 7 楼 DBA_Huangzj 的回复:

--SQL Server版本
SELECT  SERVERPROPERTY('productlevel') AS 'Service Pack' ,
        SERVERPROPERTY('edition') AS edition ,
        SERVERPROPERTY('productversion') AS 'build number'

执行一下看看,你1楼的报错是说你的sqlserver比mdf的版本还要低的意思

感谢您的帮助,我在SQL2012恢复也报同样的错误,mdf是2008的,捉急

大神,方便收邮件吗,我把附件发给你看下?

#12


引用 10 楼 shzhouhuiyu 的回复:
不行的,数据库为suspect时这招最好用,但在目前场合下不灵了

请问最开始的mdf文件可有备份?
找出备份的mdf出来试试,应该可行,我测试过的:
1.建同名库.
2.停SQL服务.
3.用问题mdf文件替换同名库的mdf文件.
4.启动SQL服务.
5.数据库设为紧急状态.
6.一般就能读数据了,此时建个空数据库,把数据导出到新库里.
7.导出完成后,最终把这个问题库删除了吧.

#13


引用 12 楼 ap0405140 的回复:
Quote: 引用 10 楼 shzhouhuiyu 的回复:

不行的,数据库为suspect时这招最好用,但在目前场合下不灵了

请问最开始的mdf文件可有备份?
找出备份的mdf出来试试,应该可行,我测试过的:
1.建同名库.
2.停SQL服务.
3.用问题mdf文件替换同名库的mdf文件.
4.启动SQL服务.
5.数据库设为紧急状态.
6.一般就能读数据了,此时建个空数据库,把数据导出到新库里.
7.导出完成后,最终把这个问题库删除了吧.

最开始mdf文件有备份,但我需要恢复到最近的状态,也就是现在的mdf文件的数据库

#14


发我邮箱给我看看,私信你了

#15


引用 14 楼 DBA_Huangzj 的回复:
发我邮箱给我看看,私信你了

发了

#16


看邮件。

引用 15 楼 shzhouhuiyu 的回复:
Quote: 引用 14 楼 DBA_Huangzj 的回复:

发我邮箱给我看看,私信你了

发了

#1


你是把2008的库放到2000执行?

#2


版本655指的是SQL2008  ,如果你从2008分离出来的mdf/ldf,是不能直接附加到2000的。但是单纯在2008里面执行是没有问题的

#3


用附加的试下,看行不行

#4


引用 2 楼 DBA_Huangzj 的回复:
版本655指的是SQL2008  ,如果你从2008分离出来的mdf/ldf,是不能直接附加到2000的。但是单纯在2008里面执行是没有问题的

我的数据库服务器版本是10.50.1600.1 655,是2008R2的啊,mdf文件是考试时老师提供的。

#5


这个库就是由1个mdf和1个ldf文件构成,ldf文件损坏;
--> 删除或重命名ldf文件,
     然后附加数据库-->选择mdf文件-->在界面上会提示缺少ldf文件-->选择ldf文件-->点删除-->点确定.继续附加数据库,会自动创建一个新的ldf文件的.

#6


引用 5 楼 ap0405140 的回复:
这个库就是由1个mdf和1个ldf文件构成,ldf文件损坏;
--> 删除或重命名ldf文件,
     然后附加数据库-->选择mdf文件-->在界面上会提示缺少ldf文件-->选择ldf文件-->点删除-->点确定.继续附加数据库,会自动创建一个新的ldf文件的.

不行的,报错“
文件激活失败。物理文件名称'f:\newexam_1.ldf'可能不正确。
无法重新生成日志,原因是数据库关闭时存在打开的事务/用户,该数据库没有检查点或者该数据库是只读的。如果事务日志文件被手动删除或者由于硬件或环境问题而丢失,则可能出现此错误。
消息 1813,级别 16,状态 2,第 1 行
无法打开新数据库 'newexam'。CREATE DATABASE 中止。

#7


--SQL Server版本
SELECT  SERVERPROPERTY('productlevel') AS 'Service Pack' ,
        SERVERPROPERTY('edition') AS edition ,
        SERVERPROPERTY('productversion') AS 'build number'

执行一下看看,你1楼的报错是说你的sqlserver比mdf的版本还要低的意思

#8


参考  http://social.microsoft.com/Forums/zh-CN/86816bed-507e-44e6-a096-178eb685fcb0

当把数据库设置为应急恢复模式后一般就能读数据了,此时建个空数据库,把数据导出到新库里.
导出完成后,最终把这个问题库删除了吧.

#9


引用 7 楼 DBA_Huangzj 的回复:
--SQL Server版本
SELECT  SERVERPROPERTY('productlevel') AS 'Service Pack' ,
        SERVERPROPERTY('edition') AS edition ,
        SERVERPROPERTY('productversion') AS 'build number'

执行一下看看,你1楼的报错是说你的sqlserver比mdf的版本还要低的意思

感谢您的帮助,我在SQL2012恢复也报同样的错误,mdf是2008的,捉急

#10


引用 8 楼 ap0405140 的回复:
参考  http://social.microsoft.com/Forums/zh-CN/86816bed-507e-44e6-a096-178eb685fcb0

当把数据库设置为应急恢复模式后一般就能读数据了,此时建个空数据库,把数据导出到新库里.
导出完成后,最终把这个问题库删除了吧.

不行的,数据库为suspect时这招最好用,但在目前场合下不灵了

#11


引用 9 楼 shzhouhuiyu 的回复:
Quote: 引用 7 楼 DBA_Huangzj 的回复:

--SQL Server版本
SELECT  SERVERPROPERTY('productlevel') AS 'Service Pack' ,
        SERVERPROPERTY('edition') AS edition ,
        SERVERPROPERTY('productversion') AS 'build number'

执行一下看看,你1楼的报错是说你的sqlserver比mdf的版本还要低的意思

感谢您的帮助,我在SQL2012恢复也报同样的错误,mdf是2008的,捉急

大神,方便收邮件吗,我把附件发给你看下?

#12


引用 10 楼 shzhouhuiyu 的回复:
不行的,数据库为suspect时这招最好用,但在目前场合下不灵了

请问最开始的mdf文件可有备份?
找出备份的mdf出来试试,应该可行,我测试过的:
1.建同名库.
2.停SQL服务.
3.用问题mdf文件替换同名库的mdf文件.
4.启动SQL服务.
5.数据库设为紧急状态.
6.一般就能读数据了,此时建个空数据库,把数据导出到新库里.
7.导出完成后,最终把这个问题库删除了吧.

#13


引用 12 楼 ap0405140 的回复:
Quote: 引用 10 楼 shzhouhuiyu 的回复:

不行的,数据库为suspect时这招最好用,但在目前场合下不灵了

请问最开始的mdf文件可有备份?
找出备份的mdf出来试试,应该可行,我测试过的:
1.建同名库.
2.停SQL服务.
3.用问题mdf文件替换同名库的mdf文件.
4.启动SQL服务.
5.数据库设为紧急状态.
6.一般就能读数据了,此时建个空数据库,把数据导出到新库里.
7.导出完成后,最终把这个问题库删除了吧.

最开始mdf文件有备份,但我需要恢复到最近的状态,也就是现在的mdf文件的数据库

#14


发我邮箱给我看看,私信你了

#15


引用 14 楼 DBA_Huangzj 的回复:
发我邮箱给我看看,私信你了

发了

#16


看邮件。

引用 15 楼 shzhouhuiyu 的回复:
Quote: 引用 14 楼 DBA_Huangzj 的回复:

发我邮箱给我看看,私信你了

发了