《数据库基础及实践技术——SQL Server 2008》一3.6 分离和附加数据库

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本节书摘来自华章出版社《 数据库基础及实践技术——SQL Server 2008》一 书中的第3章,第3.6节,作者:何玉洁,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.6 分离和附加数据库

利用分离和附加数据库的操作可以实现将数据库从一台计算机移动到另一台计算机,或者从一个实例移动到另一个实例的目的。
数据库被分离后,其所包含的数据文件和日志文件不再受数据库管理系统的管理,因此,用户可以复制或剪切该数据库的全部文件,然后将它们放置到另一台计算机上,或者本计算机的其他位置上。然后,通过附加的方法可以将数据库恢复到同一台数据库服务器上,或者附加到其他数据库服务器上。
如果要将数据库移动或复制到同一台服务器的不同SQL Server实例中,或者要移动数据库的数据文件或日志文件的位置,分离和附加数据库是一种有用的方法。

3.6.1 分离数据库

分离数据库是指将数据库从SQL Server实例中删除,但不实际删除数据库的数据文件和日志文件。这与删除数据库不同,删除数据库会将数据库的所有数据文件和日志文件删除,而分离数据库会保持数据库的数据文件和日志文件的完整和一致。
数据库被分离后用户就不能再使用该数据库了,分离数据库实际就是让数据库的数据文件和日志文件不受数据库管理系统的管理,使用户可以将数据库的数据文件和日志文件复制到另一台计算机上或者同一台计算机的其他地方。
分离数据库可以用图形化的方法实现,也可以通过Transact-SQL语句实现。

  1. 用图形化方法实现
    在SQL Server Management Studio中分离数据库的步骤如下:

1)在SQL Server Management Studio的对象资源管理器中,展开“数据库”节点,在要分离的数据库上单击鼠标右键,在弹出的快捷菜单中选择“任务”→“分离”命令(如图3-21所示,假设这里分离的是Students数据库),弹出如图3-22所示的窗口。
2)“要分离的数据库”列表框中列出了要分离的数据库名,用户可在此验证这是否为要分离的数据库。

screenshot

screenshot

3)若当前有用户连接到了被分离的数据库,则默认情况下是不能执行分离操作的。例如,图3-23中就有一个活动连接,此时如果单击“确定”按钮,则弹出如图3-24所示的错误提示对话框。为避免出现这样的分离失败情况,可选中“删除连接”复选框,这时再进行分离就不会出错了。
4)默认情况下,分离操作将在分离数据库时保留过期的优化统计信息。若要更新现有的优化统计信息,可选中“更新统计信息”复选框。
5)“状态”列显示了当前数据库的状态(“就绪”表示可以被分离;“未就绪”表示不可以被分离)。
6)如果状态是“未就绪”,则“消息”列将显示未就绪原因的超链接信息,如图3-23所示。当被分离的数据库有一个或多个“活动连接”时,“消息”列将显示有多少个“活动连接”(如图3-23中的“1活动连接”)。因此,在分离数据库之前,必须选中“删除连接”复选框来断开所有与数据库的活动连接。
7)分离数据库准备就绪后,单击“确定”按钮开始分离数据库。

screenshot

  1. 用T-SQL语句实现
    分离数据库使用的是sp_detach_db系统存储过程,其语法格式为:
sp_detach_db [ @dbname= ] 'dbname' 
    [ , [ @skipchecks= ] 'skipchecks' ] 
AI 代码解读

各参数说明如下。
[ @dbname = ] 'dbname':要分离的数据库的名称。
[ @skipchecks = ] 'skipchecks':指定跳过还是运行“更新统计信息”。skipchecks的数据类型为nvarchar(10),默认值为NULL。如果要跳过“更新统计信息”,则指定true;如果要显式运行“更新统计信息”,则指定false。
【例3-16】分离Students数据库,并跳过“更新统计信息”。

EXEC sp_detach_db 'Students', 'true'
AI 代码解读

3.6.2 附加数据库

与分离数据库对应的操作是附加数据库。附加数据库就是将分离的数据库重新附加到数据库管理系统中,可以附加到本机的另一个SQL Server实例上,也可以附加到另一台数据库服务器上。在附加数据库之前,应先将要附加的数据库所包含的全部数据文件和日志文件放置到合适的位置。
在附加数据库时,必须指定主要数据文件的物理存储位置和文件名,因为主要数据文件中包含查找组成该数据库的其他文件所需的信息。如果在复制数据库文件时更改了其他文件(包括辅助数据文件和日志文件)的存储位置,则还应该明确指出所有已改变了存储位置的文件的实际存储位置信息。否则,SQL Server 将试图基于存储在主要数据文件中的文件位置信息附加其他文件,而这将导致附加数据库失败。
附加数据库可以用图形化的方法实现,也可以通过Transact-SQL语句实现。下面以附加之前分离的Students数据库为例,说明附加数据库的实现过程。

  1. 用图形化方法实现
    在SQL Server Management Studio中附加数据库的步骤如下:

1)在SSMS的对象资源管理器中,连接到要附加数据库的SQL Server实例上,展开该实例。
2)在“数据库”节点上单击鼠标右键,在弹出的快捷菜单中选择“附加”命令,弹出如图3-25所示的窗口。

screenshot

3)单击“添加”按钮,然后在弹出的“定位数据库文件”窗口中指定Students数据库的主要数据文件所在的磁盘位置,并选中主要数据文件(这里为F:Data文件夹中的Students.mdf),单击“确定”按钮,回到“附加数据库”窗口,此时该窗口形式如图3-26所示。
4)单击“确定”按钮完成附加数据库操作。

  1. 用T-SQL语句实现
    附加数据库的T-SQL语句是CREATE DATABASE,语法格式如下:
CREATE DATABASE database_name 
    ON <filespec> [ ,...n ] 
    FOR { ATTACH | ATTACH_REBUILD_LOG }
AI 代码解读

screenshot

各参数说明如下。
database_name:要附加的数据库的名称。
:同创建数据库语句的,用于指定要附加的数据库的主要数据文件。
FOR ATTACH:指定通过附加一组现有的操作系统文件来创建数据库。必须有一个指定主要数据文件的 项。至于其他文件的项,只需要指定与第一次创建数据库或上一次附加数据库时路径不同的文件即可。FOR ATTACH 对数据库文件具有如下两个要求:所有数据文件(MDF和NDF)都必须可用;如果存在多个日志文件,这些文件也都必须可用。
FOR ATTACH_REBUILD_LOG:指定通过附加一组现有的操作系统文件来创建数据库。该选项只限于可读/写的数据库。如果缺少一个或多个事务日志文件,将重新生成日志文件。必须有一个指定主要数据文件的项。FOR ATTACH_REBUILD_LOG有如下两个要求:通过附加来创建的数据库是关闭的;所有数据文件(MDF 和NDF)都必须可用。
FOR ATTACH_REBUILD_LOG选项通常用于将有大型日志的可读/写数据库复制到另一台服务器上,在这台服务器上,将频繁使用数据库副本或仅用于读操作,因而所需的日志空间少于原始数据库的日志空间。
【例3-17】附加之前分离的Students数据库。

CREATE DATABASE Students
  ON (FILENAME = 'F:\Data\Students.mdf')
  FOR ATTACH
AI 代码解读

【例3-18】假设已对Students数据库进行了分离操作,并将其中的“students_data1.ndf”和“students_log1.ldf”文件移动到了“F:Data”文件夹中(分离前这两个文件均在“D:Data”文件夹中)。移动数据库文件后,附加该数据库。

CREATE DATABASE Students
  ON ( FILENAME = 'F:\Data\students.mdf'),
     ( FILENAME = 'F:\Data\students_data1.ndf'),
     ( FILENAME = 'F:\Data\students_log1.ldf')
  FOR ATTACH
AI 代码解读

可以通过分离和附加数据库的操作,将用户数据库从低版本的SQL Server升级到高版本的SQL Server中。例如,将SQL Server 2000环境中的数据库升级到SQL Server 2008环境中。
实现迁移的过程为:
1)用sp_detach_db存储过程将数据库从低版本的SQL Server中分离出来。
2)将分离后的数据库的全部数据文件和日志文件复制到合适的位置,此步骤是可选的,如果不需要移动数据库文件的位置,则可略去此步骤。
3)使用带有FOR ATTACH或FOR ATTACH_REBUILD_LOG选项的CREATE DATABASE语句,将复制的文件附加到高版本的SQL Server实例上。

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
打赏
0
0
0
0
1408
分享
相关文章
数据库数据恢复——sql server数据库被加密的数据恢复案例
SQL server数据库数据故障: SQL server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。 数据库备份被加密,文件名字被篡改。
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以20.55亿tpmC的成绩刷新世界纪录,展现卓越性能与性价比。其轻量版满足国产化需求,兼具高性能与低成本,适用于多种场景,推动数据库技术革新与发展。
登顶TPC-C|云原生数据库PolarDB技术揭秘:单机性能优化篇
阿里云PolarDB云原生数据库在TPC-C基准测试中,以20.55亿tpmC的成绩打破性能与性价比世界纪录。此外,国产轻量版PolarDB已上线,提供更具性价比的选择。
登顶TPC-C|云原生数据库PolarDB技术揭秘:高可用-无感切换篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以20.55亿tpmC的成绩刷新世界纪录,单位成本仅0.8元人民币。PolarDB通过VotingDisk实现秒级故障切换,RPO=0,提供高可用性。PolarDB还推出国产轻量版,兼具高性能与低成本,满足多样化需求。
数据库编程:在PHP环境下使用SQL Server的方法。
看看你吧,就像一个调皮的小丑鱼在一片广阔的数据库海洋中游弋,一路上吞下大小数据如同海中的珍珠。不管有多少难关,只要记住这个流程,剩下的就只是探索未知的乐趣,沉浸在这个充满挑战的数据库海洋中。
36 16
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
登顶TPC-C|云原生数据库PolarDB技术揭秘:成本优化-软硬协同篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以超越原记录2.5倍的性能登顶排行榜,实现每分钟20.55亿笔交易,单位成本仅0.8元人民币,刷新性能与性价比双纪录。此外,还介绍了国产轻量版PolarDB MySQL的推出,满足市场对高性价比的需求。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等