sql server 2012中的一个数据库日志文件坏了,如何还原数据库?

时间:2022-05-03 08:54:54
我百度gg了一下资料,类似的情况有介绍,如
恢复方法:
1、停止数据库服务。
2、将需要恢复的数据库文件复制到另外的位置。
3、启动数据库服务。
4、确认要恢复的数据库文件已经成功复制到另外的位置,然后在SQL Server Management Studio中删除要恢复的数据库。
5、新建同名的数据库(数据库文件名也要相同)。
6、停止数据库服务。
7、用第2步中备份的.mdf文件覆盖新数据库的同名文件。
8、启动数据库服务。
9、运行alter database dbname set emergency,将数据库设置为emergency mode
10、运行下面的命令就可以恢复数据库:
use master 

declare @databasename varchar(255) 

set @databasename='要恢复的数据库名称' 

exec sp_dboption @databasename, N'single', N'true' --将目标数据库置为单用户状态 

dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS) 

dbcc checkdb(@databasename,REPAIR_REBUILD) 

exec sp_dboption @databasename, N'single', N'false'--将目标数据库置为多用户状态 


但这个脚本在sql server 2012下运行不了,出错的,请教sql2012下,这个脚本如何改写?
或者有其它方法,能在sql server 2012 下,恢复日志文件损坏的数据库

15 个解决方案

#1


不要日志文件,直接分离,然后删除日志文件,然后再附加,数据库会自动配置一个日志文件。

#2


如果需要数据库日志文件,按以下操作:
1、导出数据库的结构,重建一个数据库,
2、将数据导入到这个数据库,
3、把名字改成旧数据库的名字。

注意:做以上步骤前最好备份数据库。

#3


引用 1 楼 jack11430 的回复:
不要日志文件,直接分离,然后删除日志文件,然后再附加,数据库会自动配置一个日志文件。


没用,没有日志文件,根本无法附加数据库上去

#4


重建日志也不行???

#5


sql 2012 不会自动重建日志的

#6


晕倒,你直接分离数据库,然后删除日志文件,然后再附加数据库,就可以了啊,

#7


如果再不行,那就建一个新的数据库,把旧数据库的结构复制过去,然后倒入数据

#8


引用 6 楼 jack11430 的回复:
晕倒,你直接分离数据库,然后删除日志文件,然后再附加数据库,就可以了啊,

对sql 2012无效,老版本是否可以我不确定

#9


引用 7 楼 jack11430 的回复:
如果再不行,那就建一个新的数据库,把旧数据库的结构复制过去,然后倒入数据

问题时,损坏日志的数据库我已经分离备份,所以现在老数据库我根本进不去了,也无法再次附加。
所以你的第二种方式,目前我已经无法进行了

#10


http://www.cnblogs.com/ATree/archive/2010/05/16/Sqlserver2005-mdf-ldf.html

#11


引用 10 楼 daiyueqiang 的回复:
http://www.cnblogs.com/ATree/archive/2010/05/16/Sqlserver2005-mdf-ldf.html


55555~~~~~ sql 2012 不支持函数 Sp_dboption

#12


引用 11 楼 nbjed 的回复:
Quote: 引用 10 楼 daiyueqiang 的回复:

http://www.cnblogs.com/ATree/archive/2010/05/16/Sqlserver2005-mdf-ldf.html


55555~~~~~ sql 2012 不支持函数 Sp_dboption

lz 你尝试一下这个呢
CREATE DATABASE DB_NAME

ON (FILENAME = 'D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\DBName.MDF') 
FOR ATTACH_REBUILD_LOG ; 
GO

#13


如果数据库不是干净的分离是无法重建LOG的
http://blog.csdn.net/smithliu328/article/details/7983002

#14


也可以尝试一下
sp_attach_single_file_db @dbname= 'bs_Data', @physname= 'F:\bs_Data.mdf'

#15


不会吧,我记得在2005上面都可以操作啊。

#1


不要日志文件,直接分离,然后删除日志文件,然后再附加,数据库会自动配置一个日志文件。

#2


如果需要数据库日志文件,按以下操作:
1、导出数据库的结构,重建一个数据库,
2、将数据导入到这个数据库,
3、把名字改成旧数据库的名字。

注意:做以上步骤前最好备份数据库。

#3


引用 1 楼 jack11430 的回复:
不要日志文件,直接分离,然后删除日志文件,然后再附加,数据库会自动配置一个日志文件。


没用,没有日志文件,根本无法附加数据库上去

#4


重建日志也不行???

#5


sql 2012 不会自动重建日志的

#6


晕倒,你直接分离数据库,然后删除日志文件,然后再附加数据库,就可以了啊,

#7


如果再不行,那就建一个新的数据库,把旧数据库的结构复制过去,然后倒入数据

#8


引用 6 楼 jack11430 的回复:
晕倒,你直接分离数据库,然后删除日志文件,然后再附加数据库,就可以了啊,

对sql 2012无效,老版本是否可以我不确定

#9


引用 7 楼 jack11430 的回复:
如果再不行,那就建一个新的数据库,把旧数据库的结构复制过去,然后倒入数据

问题时,损坏日志的数据库我已经分离备份,所以现在老数据库我根本进不去了,也无法再次附加。
所以你的第二种方式,目前我已经无法进行了

#10


http://www.cnblogs.com/ATree/archive/2010/05/16/Sqlserver2005-mdf-ldf.html

#11


引用 10 楼 daiyueqiang 的回复:
http://www.cnblogs.com/ATree/archive/2010/05/16/Sqlserver2005-mdf-ldf.html


55555~~~~~ sql 2012 不支持函数 Sp_dboption

#12


引用 11 楼 nbjed 的回复:
Quote: 引用 10 楼 daiyueqiang 的回复:

http://www.cnblogs.com/ATree/archive/2010/05/16/Sqlserver2005-mdf-ldf.html


55555~~~~~ sql 2012 不支持函数 Sp_dboption

lz 你尝试一下这个呢
CREATE DATABASE DB_NAME

ON (FILENAME = 'D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\DBName.MDF') 
FOR ATTACH_REBUILD_LOG ; 
GO

#13


如果数据库不是干净的分离是无法重建LOG的
http://blog.csdn.net/smithliu328/article/details/7983002

#14


也可以尝试一下
sp_attach_single_file_db @dbname= 'bs_Data', @physname= 'F:\bs_Data.mdf'

#15


不会吧,我记得在2005上面都可以操作啊。