浅谈如何在SQLServer2008中附加一个数据库

向您推荐《SQL Server 2008深度应用》,相信通过本专题,能让您更深刻的了解SQL Server 2008。

成都创新互联公司自2013年起,是专业互联网技术服务公司,拥有项目成都网站建设、网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元民丰做网站,已为上家服务,为民丰各地企业和个人服务,联系电话:18980820575

在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”。

 
 
 
  1. Use Master 
  2. go 
  3. CREATE DATABASE MyDB1 
  4. ON 
  5. ( NAME = MyDB1_dat, 
  6. FILENAME = 'C:Program Files 
  7. Microsoft SQL ServerMSSQL10.SQL2008MSSQLDATA 
  8. Summary Database DataData File for Monthly Archive 
  9. Microsoft SQL Server 2008 Data FileMyDB1.mdf', 
  10. SIZE = 10, 
  11. MAXSIZE = 50, 
  12. FILEGROWTH = 5 ) 
  13. LOG ON 
  14. ( NAME = MyDB1_log, 
  15. FILENAME = 'C:Program Files 
  16. Microsoft SQL ServerMSSQL10.SQL2008MSSQLDATA 
  17. Summary Database DataData File for Monthly Archive 
  18. Microsoft SQL Server 2008 Data FileMyDB1.ldf', 
  19. SIZE = 5MB, 
  20. MAXSIZE = 25MB, 
  21. FILEGROWTH = 5MB ) 
  22. GO 

现在,让我们分离该数据库,并尝试使用sp_detach_db和 sp_attach_db将它重新附加。执行下面的事务SQL语句。

 
 
 
  1. use master 
  2. go 
  3. sp_detach_db 'MyDB1' 
  4. go 
  5. sp_attach_db 'MyDb1', 
  6. 'C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data 
  7. Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1.mdf', 
  8. 'C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data 
  9. Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1.ldf' 
  10. GO 
  11. 你可以使用具有“For Attach”从句的“Create database”命令附加上相同的数据库文件,如下所示。 
  12. use master 
  13. go 
  14. sp_detach_db 'MyDB1' 
  15. go 
  16. CREATE DATABASE MyDB1 
  17. ON 
  18. FILENAME = 'C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data 
  19. Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1.mdf' 
  20. ), 
  21. FILENAME = 'C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data 
  22. Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1.ldf' 
  23. ) for Attach 
  24. go 

现在,让我们分离数据库MyDB1,然后删除.ldf文件,再然后使用sp_attach_single_file_db系统存储过程通过执行下面的TSQL命令将它重新附加上。

 
 
 
  1. use master 
  2. go 
  3. sp_detach_db 'MyDB1' 
  4. go 
  5. exec master..xp_cmdshell 'del "C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data 
  6. Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1.ldf"' 
  7. go 

注意:我使用xp_cmdshell来删除.ldf文件。如果xp_cmdshell没有激活,那么你将得到下面的错误。

错误:

 
 
 
  1. Msg 15281, Level 16, State 1, Procedure xp_cmdshell, Line 1 
  2. SQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' 
  3. because this component is turned off as part of the security configuration for 
  4. this server. A system administrator can enable the use of 'xp_cmdshell' by using 
  5. sp_configure. For more information about enabling 'xp_cmdshell', see 
  6. "Surface Area Configuration" in SQL Server Books Online. 

你可以使用下面的事务SQL语句来激活xp_cmdshell。 

 
 
 
  1. use master 
  2. go 
  3. sp_configure 'show advanced options',1 
  4. go 
  5. reconfigure with override 
  6. go 
  7. sp_configure 'xp_cmdshell',1 
  8. go 
  9. reconfigure with override 
  10. go 

或者,你可以在MS-DOS命令提示符中使用Windows资源管理器的“Del”命令来删除.ldf文件。

现在,让我们只使用sp_attach_single_file_db来附加.MDF文件。执行下面所示的命令。

 
 
 
  1. use master 
  2. go 
  3. sp_attach_single_file_db 'MyDB1', 
  4. 'C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data 
  5. Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1.mdf' 
  6. go 

结果

 
 
 
  1.  File activation failure. The physical file name
  2. "C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data
  3. Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1.ldf" may be incorrect.
  4. New log file 'C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data
  5. Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1_log.LDF' was created.

你可以只通过使用带有“For ATTACH_REBUILD_LOG”从句的“Create database”命令来附加相同的数据库.MDF文件,如下所示。

 
 
 
  1. use master 
  2. go 
  3. sp_detach_db 'MyDB1' 
  4. go 
  5. exec master..xp_cmdshell 'del 
  6. "C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data 
  7. Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1_log.ldf"' 
  8. go 

注意:当日志文件被重新创建时,SQL Server自动对日志文件名称添加后缀“_log”。

 
 
 
  1. CREATE DATABASE MyDB1 
  2. ON 
  3. FILENAME = 'C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data 
  4. Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1.mdf' 
  5. ) for ATTACH_REBUILD_LOG 

结果:

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

总结

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

网站题目:浅谈如何在SQLServer2008中附加一个数据库
当前URL:http://www.shufengxianlan.com/qtweb/news5/488355.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联