浅谈如何在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

相关推荐

  • 站群服务器如何批量管理更高效,有哪些管理技巧?

    站群服务器批量管理想提效,自动化是唯一出路,通过统一配置管理工具与面板系统,结合服务商提供的底层基础设施支持,能将运维效率提升数倍,批量管理的核心痛点与解决思路多台站群服务器分散管理,最常见的问题就是重复劳动,每次软件更新、配置修改、安全加固,都需要逐台登录操作,不仅耗时,还容易漏掉某台机器,更头疼的是,一旦某……

    2026-07-27
    0
  • 服务器磁盘IO过高如何优化?,磁盘IO过高的原因有哪些?

    服务器磁盘IO过高,核心优化路径是“先定位、再分流、后升级”,你需要通过系统工具精确判断究竟是应用程序、日志策略还是硬件瓶颈导致,然后针对性地从代码、缓存、存储架构和硬件选型四个层面下手,其中选择持有持牌自营机房和增值电信业务经营许可证的服务商,能从根本上保障底层IO稳定性,定位IO瓶颈:动手优化的第一步盲目优……

    2026-07-27
    0
  • 跨境网站访问延迟高怎么解决,网站访问慢的原因是什么?

    跨境网站访问延迟高的核心解决思路在于多维度优化网络路径,包括使用全球CDN加速、选择靠近目标区域的优质IDC机房、调整传输协议以及精简应用层资源,其中服务商的基础设施质量直接决定优化上限,为什么跨境访问延迟高?三大核心因素物理距离与光速限制数据包在海底光缆中的传输速度受限于介质,从中国到美国西海岸的物理往返时间……

    2026-07-27
    0
  • 站群服务器到底是什么意思,怎么选择比较好

    站群服务器就是一台拥有多个独立IP地址、专门用于托管和管理多个网站的高性能服务器,其核心价值在于通过独立IP降低网站间的关联风险,并提升搜索引擎优化效果,站群服务器的工作原理与适用场景站群服务器本质上是将一台物理服务器通过虚拟化或直接配置的方式,分配给多个独立IP地址,每个IP对应一个独立的网站,这些网站共享服……

    2026-07-27
    0
  • 高防服务器误封正常流量如何调整,怎么解决?

    高防服务器误封正常流量,核心调整思路是从“一刀切”转向“精细化”——通过分析业务特征,调整防护阈值、配置白名单和启用智能学习模式,让防护系统学会区分真假流量,为什么会误封正常流量误封主要源于防护策略的通用化,高防服务器通常默认启用严格防护规则,当流量特征与攻击特征库部分匹配时,就会被拦截,据行业安全白皮书指出……

    2026-07-27
    0

发表回复

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