读书人

SQL2005恢复只有mdf文件的数据库,该怎

发布时间: 2012-02-24 16:30:38 作者: rapoo

SQL2005恢复只有mdf文件的数据库
我把原来的数据库分离后,直接把日志文件给干掉了。原来在SQL 2000里经常这么干,只用一个mdf就附加了。没想到sql2005居然不行。我试验了一圈 终于找到一个成功的方法。转载,供后来者参考。

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


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


[解决办法]
收藏 顶帖 接分。
[解决办法]
学习。
[解决办法]

[解决办法]

SQL code
use master   go   sp_attach_single_file_db 'db_NAME',   'D:\db_NAME.mdf'   --PATHgo
[解决办法]
OR


SQL code
CREATE DATABASE TestDB   ON   (   FILENAME ='D:\TestDB.mdf'     ) for ATTACH_REBUILD_LOG
[解决办法]
推荐此贴的目的在于话题的引入,请大家继续讨论更多的方法
[解决办法]
SQL code
/*网上看到的整理了一下。在SQL Server 7.0中,微软推出了sp_attach_db和sp_attach_single_file_db系统存储过程。它对于SQL Server数据库管理员执行下面的任务是非常方便的: 1 使用sp_attach_db系统存储过程直接将.MDF和.LDF文件附加到服务器。2 使用sp_attach_single_file_db系统存储过程只附加.MDF文件。3 使用sp_detach_db将数据库从一个服务器分离,复制.MDF文件到另一个服务器上,然后使用sp_attach_db系统存储过程重新附加这些文件到两个服务器上。                            尽管它对于SQL Server数据库管理员是很有用的,但是在使用这两个存储过程时是有一些限制的。限制如下: 1 你不能附加多个日志文件2 你不能附加16个以上的文件 在SQL Server 2008中,微软宣布上面的系统存储过程将在未来的版本中被废弃。而他们在"Create Database"SQL语句中添加了一个从句"For Attach"。 下面介绍使用"For Attach"从句的多种方法,以克服在使用sp_attach_db和sp_attach_single_file_db时要面临的限制。*/--建立测试数据库 Use Master   go   CREATE DATABASE TestDB   ON   ( NAME = TestDB,   FILENAME = 'D:\TestDB.mdf',   SIZE = 10,   MAXSIZE = 50,   FILEGROWTH = 5 )   LOG ON   ( NAME = TestDB_log,   FILENAME = 'D:\TestDB_log.ldf',   SIZE = 5MB,   MAXSIZE = 25MB,   FILEGROWTH = 5MB )   GO   --现在,让我们分离该数据库,并尝试使用sp_detach_db和sp_attach_db将它重新附加。--执行下面的事务SQL语句。 use master   go   sp_detach_db 'TestDB'   go   sp_attach_db 'TestDB',   'D:\TestDB.mdf',   'D:\TestDB_log.ldf'  GO   --你也可以使用具有"For Attach"从句的"Create database"命令附加上相同的数据库文件,如下所示。  use master   go   sp_detach_db 'TestDB'   go    CREATE DATABASE TestDB   ON   (FILENAME = 'D:\TestDB.mdf'),  (FILENAME = 'D:\TestDB_log.ldf') for Attach   go   --现在,让我们分离数据库TestDB,然后删除.ldf文件,再然后使用sp_attach_single_file_db--系统存储过程通过,执行下面的TSQL命令将它重新附加上。 use master   go  sp_detach_db 'TestDB'   go   exec master..xp_cmdshell 'del "D:\TestDB_log.ldf"'   go    --你可以使用下面的事务SQL语句来激活xp_cmdshell。  use master   go   sp_configure 'show advanced options',1   go   reconfigure with override   go   sp_configure 'xp_cmdshell',1   go   reconfigure with override   go   --或者,你可以在MS-DOS命令提示符中使用Windows资源管理器的"Del"命令来删除.ldf文件。--现在,让我们只使用sp_attach_single_file_db来附加.MDF文件。执行下面所示的命令。 use master   go   sp_attach_single_file_db 'TestDB',   'D:\TestDB.mdf'   go    --你可以只通过使用带有"For ATTACH_REBUILD_LOG"从句的"Create database"命令来附加--相同的数据库.MDF文件,如下所示。 use master   go  sp_detach_db 'TestDB'   go   exec master..xp_cmdshell 'del "D:\TestDB_log.ldf"'   go   --注意:当日志文件被重新创建时,SQL Server自动对日志文件名称添加后缀"_log"。 CREATE DATABASE TestDB   ON   (   FILENAME ='D:\TestDB.mdf'     ) for ATTACH_REBUILD_LOG     --本文介绍了带有"For Attach"和"for ATTACH_REBUILD_LOG"用于一个单独的.MDF文件和一个单独的.--LDF文件的"Create Database"语句的使用。 

读书人网 >SQL Server

热点推荐