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.   在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"语句的使用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值