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

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介: 本节书摘来自华章出版社《 数据库基础及实践技术——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' ] 

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

EXEC sp_detach_db 'Students', 'true'

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 }

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

【例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

可以通过分离和附加数据库的操作,将用户数据库从低版本的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
相关文章
|
13天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
52 10
|
13天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
78 6
|
2天前
|
SQL XML 数据库
sql导入数据库命令
在SQL Server中,数据库导入可通过多种方式实现:1) 使用SSMS的“导入数据”向导从各种源(如Excel、CSV)导入;2) BULK INSERT语句适用于导入文本文件;3) bcp命令行工具进行批量数据交换;4) OPENROWSET函数直接从外部数据源(如Excel)插入数据。在操作前,请记得备份数据库,并可能需对数据进行预处理以符合SQL Server要求。注意不同方法可能依版本和配置而异。
|
5天前
|
SQL 自然语言处理 数据库
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
|
8天前
|
存储 SQL 安全
6.数据库技术基础
6.数据库技术基础
|
8天前
|
SQL 自然语言处理 测试技术
NL2SQL进阶系列(4):ConvAI、DIN-SQL等16个业界开源应用实践详解[Text2SQL]
NL2SQL进阶系列(4):ConvAI、DIN-SQL等16个业界开源应用实践详解[Text2SQL]
NL2SQL进阶系列(4):ConvAI、DIN-SQL等16个业界开源应用实践详解[Text2SQL]
|
9天前
|
SQL 数据库
数据库SQL语言实战(二)
数据库SQL语言实战(二)
|
9天前
|
SQL 关系型数据库 数据库
【后端面经】【数据库与MySQL】SQL优化:如何发现SQL中的问题?
【4月更文挑战第12天】数据库优化涉及硬件升级、操作系统调整、服务器/引擎优化和SQL优化。SQL优化目标是减少磁盘IO和内存/CPU消耗。`EXPLAIN`命令用于检查SQL执行计划,关注`type`、`possible_keys`、`key`、`rows`和`filtered`字段。设计索引时考虑外键、频繁出现在`where`、`order by`和关联查询中的列,以及区分度高的列。大数据表改结构需谨慎,可能需要停机、低峰期变更或新建表。面试中应准备SQL优化案例,如覆盖索引、优化`order by`、`count`和索引提示。优化分页查询时避免大偏移量,可利用上一批的最大ID进行限制。
34 3
|
12天前
|
SQL 人工智能 自然语言处理
NL2SQL进阶系列(2):DAIL-SQL、DB-GPT开源应用实践详解Text2SQL
NL2SQL进阶系列(2):DAIL-SQL、DB-GPT开源应用实践详解Text2SQL
NL2SQL进阶系列(2):DAIL-SQL、DB-GPT开源应用实践详解Text2SQL
|
12天前
|
SQL 监控 数据库
数据库管理与电脑监控软件:SQL代码优化与实践
本文探讨了如何优化数据库管理和使用电脑监控软件以提升效率。通过SQL代码优化,如使用索引和调整查询语句,能有效提高数据库性能。同时,合理设计数据库结构,如数据表划分和规范化,也能增强管理效率。此外,利用Python脚本自动化收集系统性能数据,并实时提交至网站,可实现对电脑监控的实时性和有效性。这些方法能提升信息系统稳定性和可靠性,满足用户需求。
45 0