日期:2014-05-18 浏览次数:20520 次
use master go sp_attach_single_file_db 'db_NAME', 'D:\db_NAME.mdf' --PATH go
------解决方案--------------------
OR
CREATE DATABASE TestDB ON ( FILENAME ='D:\TestDB.mdf' ) for ATTACH_REBUILD_LOG
------解决方案--------------------
推荐此贴的目的在于话题的引入,请大家继续讨论更多的方法
------解决方案--------------------
/*
网上看到的整理了一下。
在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:\