(转)看到网上有很多关于这个的帖子,但在执行“设置test数据库为紧急修复模式”时,SQL Server 2008总是失败。哪位大侠给个SQLServer 2008的有效方法。

1.  sql2005恢复只有mdf文件的数据库 ,我把原来的数据库分离后 直接把日志文件给干掉了 原来在sql2000里经常这么干 ,只用一个mdf就附加了 没想到sql2005居然不行 我就日了 可把我给急坏了,里面的数据超重要啊 估计丢了 boss的脸该老难看了 没辙了 百度了一圈 一堆乱遭的答案 我试验了一圈 终于找到一个成功的方法 转载 供后来者参考  

SQL2005 如何在没有日志文件的情况下如何恢复MDF数据库文件

 

第一步:先建立一个同名数据库,停止SQL SERVER2005,将没有日志的的.mdf数据库文件覆盖刚新建的.mdf数据库文件,重新启动数据库。
第三步:在查询分析器中运行如下代码:

alter database 数据库名 set emergency '--将数据库设置为紧急状态

use master  

declare @databasename varchar(255)  

set @databasename='数据库名' '--你的.mdf文件文件名

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'--将目标数据库置为多用户状态  




执行出现“数据库其他多个文件与数据库主文件不匹配....”错误,再执行一次即可 。

2.(配合上一篇中的方法)

--置数据库的紧急模式
alter database dbname set emergency
go
--置数据库为单用户模式
alter database dbname set single_user with rollback immediate
go
use master
go
--重建数据库日志文件
alter database dbname Rebuild Log on  
(name=dbname_log,filename='D:\Log\dbname_log.LDF')
go
--最后设置数据库为多用户模式。
alter database dbname set multi_user  
 
通过以上方法修复数据库后,可以dbcc checkdb一下数据库,如果发现页级错误,可以通过以下命令修复。
 
dbcc checkdb(dbname,REPAIR_ALLOW_DATA_LOSS)  

dbcc checkdb(dbname,REPAIR_REBUILD)

以上两种方法都不能解决问题 :

重建数据库日志文件时报错:

Msg 3415, Level 16, State 1, Line 2Database 'dbname' cannot be upgraded because it is read-only or has read-only files. Make the database or files writeable, and rerun recovery.

Msg 5024, Level 16, State 2, Line 2No entry found for the primary log file in sysfiles1.  Could not rebuild the log.

Msg 5028, Level 16, State 2, Line 2The system could not activate enough of the database to rebuild the log.

posted @ 2011-04-01 23:01  ttjia  阅读(1997)  评论(1编辑  收藏  举报