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

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

在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. (   
  19. FILENAME = 'C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data   
  20. Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1.mdf'   
  21. ),   
  22. (   
  23. FILENAME = 'C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data   
  24. Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1.ldf'   
  25. for Attach   
  26. 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. (   
  4. FILENAME = 'C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database Data   
  5. Data File for Monthly ArchiveMicrosoft SQL Server 2008 Data FileMyDB1.mdf'   
  6. 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”语句的使用。

【编辑推荐】

  1. SQL Server 2008行数据和页数据压缩解密
  2. 图解SQL Server 2008 R2主数据服务安装
  3. 理解SQL Server 2008索引的存储结构
  4. SQL Server移动系统数据库开发详解
  5. SQL Server 2008 R2十大新特性解析

 

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/235691.html<

(0)
运维的头像运维
上一篇2025-04-21 16:17
下一篇 2025-04-21 16:18

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注