文:小崔
MsSqlServer每个数据库都有两类文件.mdf和.ldf。都非常重要,简直是缺一不可。但不是决对不能恢复,最近我就遇到了一个情况:有人不小心把.ldf文件删除了,只有.mdf文件的恢复过程如下:
参考文章:http://topic.csdn.net/u/20070313/10/319bb747-e2ff-4b28-9b14-174e09abb03e.html
注:下面是操作后回顾的过程,可能有少许出入,请自行斟酌。
第一阶段:
1.停止SqlServer
2.备份 故障数据库的.mdf文件
3.启动SqlServer
4.删除故障数据库,再新建一个同名数据库,数据库文件位置一定要在原来的位置。
5.停止SqlServer
6.用备份的.mdf文件覆盖新建数据库的.mdf文件。
7.启动SqlServer
8.此数据库被置疑。先不要管。
第二阶段:
---------------SQL BEGIN----------------
--允许修改系统表
Use Master
go
sp_configure 'allow updates', 1
go
reconfigure with override
Go
--设置此数据库为紧急模式
update sysdatabases set status = -32768 where name = '数据库名'
go
--重建此数据库的 日志文件,此步非常重要。.ldf文件名可定,但路径一定要和.mdf在同一个目录。
dbcc rebuild_log( '数据库名', 'C:\sql_data\数据库名_Log0a.LDF')
go
--数据库状态重置为正常
sp_resetstatus '数据库名'
--数据库状态设置为 单用户模式,此步必须,否则不能进行DBCC。
sp_dboption '数据库名', 'single user', 'true'
go
--检查数据库正确性,并修复错误,允许一些数据丢失。这步本人还没有细的研究,是否不用加第二个参数也可以。
DBCC CHECKDB('数据库名', 'REPAIR_ALLOW_DATA_LOSS')
go
--设置数据库为正常模式
update sysdatabases set status = 0 where name = '数据库名'
go
--检查完成,设置数据库 取消单用户模式
sp_dboption '数据库名', 'single user', 'false'
go
--禁止修改系统表
sp_configure 'allow updates', 0
go
reconfigure with override
go
---------------SQL END----------------
可以立即刷新下,如果不可用,就重启下SqlServer服务。

