《数据库基础及实践技术——SQL Server 2008》一3.6 分离和附加数据库-阿里云开发者社区

开发者社区> 华章计算机> 正文

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

简介: 本节书摘来自华章出版社《 数据库基础及实践技术——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实例上。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【基础】mysql数据库(key_buffer_size)
【基础】mysql数据库(key_buffer_size) 关于mysql中的key_buffer_size 一、key_buffer_size key_buffer_size是对MyISAM表性能影响最大的一个参数 show variables like 'key_buffer_size'; .
1855 0
MySQL 基础---数据操作
数据的操作(CRUD): 插入数据记录(CREATE) 查询数据记录(READ) 更新数据记录(UPDATE) 删除数据记录(DELETE) 插入数据记录("INSERT INTO") 插入数据: 插入完整数据记录、插入数据记录一部分、插入多条数据记录、插入查询结果。
499 0
MySQL 基础---多表数据查询
多表数据记录查询: 关系数据的各种操作 内连接查询 外连接查询 子查询 关系数据操作 传统的运算: 并(UNION) 笛卡尔积(CARTESIAN PRODUCT) 专门针对数据库操作的运算---连接(JOIN) (1) 并(UNION) “并”就是把具有相同字段数目和字段类型的表合并到一起。
719 0
SQL SERVER数据库删除LOG文件和清空日志的方案
原文:SQL SERVER数据库删除LOG文件和清空日志的方案 数据库在使用过程中会使日志文件不断增加,使得数据库的性能下降,并且占用大量的磁盘空间。SQL Server数据库都有log文件,log文件记录用户对数据库修改的操作。
4422 0
MySQL 基础---数据库
MySQL官网下载 要想在命令提示符中使用mysql命令语句,必须将mysql的安装路径下的bin文件夹(D:\java\mysql\bin)配置在环境变量path中 启动与停止服务 启动服务net start mysql 关闭服务net stop ...
654 0
阿里云数据库推出SQL Server 2016 单机基础版本
2017年9月,云数据库推出SQL Server 2016版本,本文是2016单机基础版本的产品形态说明。
4455 0
MySQL 基础---单表数据记录查询
**查询数据记录操作: ** 简单数据记录查询 条件数据记录查询 排序数据记录查询 限制数据记录查询 统计函数和分组数据记录查询 测试表 # 创建雇员表 create table t_employee( empno int(1...
786 0
10059
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载