控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

浅谈如何在SQL Server 2008中附加一个数据库

作者:佚名 出处:互联网 2010年03月30日 阅读:

在SQL Server 7.0中,微软推出了sp_attach_db和sp_attach_single_file_db系统存储过程。它对于SQL Server数据库管理员执行下面的任务是非常方便的:

使用sp_attach_db系统存储过程直接将.MDF和.LDF文件附加到服务器。

使用sp_attach_single_file_db系统存储过程只附加.MDF文件。

使用sp_detach_db将数据库从一个服务器分离,复制.MDF文件到另一个服务器上,然后使用sp_attach_db系统存储过程重新附加这些文件到两个服务器上。

尽管它对于SQL Server数据库管理员是很有用的,但是在使用这两个存储过程时是有一些限制的。限制如下:

你不能附加多个日志文件

你不能附加16个以上的文件

在SQL Server 2008中,微软宣布上面的系统存储过程将在未来的版本中被废弃。而他们在“Create Database”SQL语句中添加了一个从句“For Attach”。

这篇文章将介绍使用“For Attach”从句的多种方法,以克服在使用sp_attach_db和sp_attach_single_file_db时要面临的限制。

假设我们有一个数据库叫“MyDB1”,它有一个.MDF文件和一个.LDF文件。使用下面的事务SQL语句创建这个数据库。再假设.MDF文件和.LDF文件的位置是“C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database DataData File for Monthly ArchiveMicrosoft SQL Server 2008 Data File”。

Use Master   go   CREATE DATABASE MyDB1   ON   ( NAME = MyDB1_dat,   FILENAME = 'C:Program Files   Microsoft SQL ServerMSSQL10.SQL2008MSSQLDATA   Summary Database DataData File for Monthly Archive   Microsoft SQL Server 2008 Data FileMyDB1.mdf',   SIZE = 10,   MAXSIZE = 50,   FILEGROWTH = 5 )   LOG ON   ( NAME = MyDB1_log,   FILENAME = 'C:Program Files   Microsoft SQL ServerMSSQL10.SQL2008MSSQLDATA   Summary Database DataData File for Monthly Archive   Microsoft SQL Server 2008 Data FileMyDB1.ldf',   SIZE = 5MB,   MAXSIZE = 25MB,   FILEGROWTH = 5MB )   GO  现在,让我们分离该数据库,并尝试使用sp_detach_db和 sp_attach_db将它重新附加。执行下面的事务SQL语句。

use master   go   sp_detach_db 'MyDB1'   go   sp_attach_db 'MyDb1',   'C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data   Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1.mdf',   'C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data   Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1.ldf'   GO   你可以使用具有“For Attach”从句的“Create database”命令附加上相同的数据库文件,如下所示。   use master   go   sp_detach_db 'MyDB1'   go   CREATE DATABASE MyDB1   ON   (   FILENAME = 'C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data   Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1.mdf'   ),   (   FILENAME = 'C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data   Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1.ldf'   ) for Attach   go  现在,让我们分离数据库MyDB1,然后删除.ldf文件,再然后使用sp_attach_single_file_db系统存储过程通过执行下面的TSQL命令将它重新附加上。

use master   go   sp_detach_db 'MyDB1'   go   exec master..xp_cmdshell 'del "C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data   Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1.ldf"'   go  注意:我使用xp_cmdshell来删除.ldf文件。如果xp_cmdshell没有激活,那么你将得到下面的错误。

错误:

Msg 15281, Level 16, State 1, Procedure xp_cmdshell, Line 1   SQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell'   because this component is turned off as part of the security configuration for   this server. A system administrator can enable the use of 'xp_cmdshell' by using   sp_configure. For more information about enabling 'xp_cmdshell', see   "Surface Area Configuration" in SQL Server Books Online.  你可以使用下面的事务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 'MyDB1',   'C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data   Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1.mdf'   go  结果

 File activation failure. The physical file name  "C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data  Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1.ldf" may be incorrect.  New log file 'C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data  Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1_log.LDF' was created. 你可以只通过使用带有“For ATTACH_REBUILD_LOG”从句的“Create database”命令来附加相同的数据库.MDF文件,如下所示。

use master   go   sp_detach_db 'MyDB1'   go   exec master..xp_cmdshell 'del   "C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data   Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1_log.ldf"'   go  注意:当日志文件被重新创建时,SQL Server自动对日志文件名称添加后缀“_log”。

CREATE DATABASE MyDB1   ON   (   FILENAME = 'C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data   Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1.mdf'   ) for ATTACH_REBUILD_LOG  结果:

File activation failure. The physical file name "C:Program FilesMicrosoft SQL Server   MSSQL10.SQL2008MSSQLDATASummary Database DataData File for   Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1_log.LDF" may be incorrect.   New log file 'C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database   DataData File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1_log.LDF' was created.  总结

本文介绍了带有“For Attach”和“for ATTACH_REBUILD_LOG”用于一个单独的.MDF文件和一个单独的.LDF文件的“Create Database”语句的使用。

 

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统