
任务分解
在SQL Server数据库系统中数据库可分为系统数据库和用户数据库。系统数据库是SQL Server在安装时就已经创建的,并具有特定管理功能的数据库。用户数据库是在系统安装完成后,为特定应用系统而创建的数据库,存储的是用户的应用数据。(提醒:不要把用户数据存储到系统数据库中。)在SQL Server 2012中,默认的系统数据库有master、model、msdb、tempdb、Resource。
(1)master数据库
master数据库存储了SQL Server系统的所有系统级信息。包括实例范围的元数据(例如登录账户)、端点、连接服务器和系统配置设置。在SQL Server中,系统对象不再存储在master数据库中,而是存储在Resource数据库中。此外,master数据库还记录了系统中有哪些数据库、数据库文件的位置以及SQL Server的初始化信息。因此,如果master数据库不可用,则SQL Server无法启动。
提醒:使用master数据库时,请考虑下列建议:
①始终有一个master数据库的当前备份可用。
②执行下列操作后,尽快备份master数据库:
● 创建、修改或删除任意数据库。
● 更改服务器或数据库的配置值。
● 修改或添加登录账户。
③不要在master中创建用户对象。否则,必须更频繁地备份master。
④不要针对master数据库将TRUSTWORTHY选项设置为ON。
(2)model数据库
model数据库包含在SQL Server实例上创建的所有数据库的模板。因为每次启动SQL Server时都会创建tempdb,所以model数据库必须始终存在于SQL Server系统中。model数据库的全部内容(包括数据库选项)都会被复制到新的数据库。启动期间,也可使用model数据库的某些设置创建新的tempdb,因此model数据库必须始终存在于SQL Server系统中。(提醒:如果用特定用户的模板信息修改model数据库,建议备份model。)
(3)msdb数据库
SQL Server代理使用msdb数据库来计划警报和作业,SQL Server Management Studio、Service Broker和数据库邮件等其他功能也使用该数据库。例如,SQL Server在msdb中的表中自动保留一份完整的联机备份与还原历史记录。这些信息包括执行备份一方的名称、备份时间和用来存储备份的设备或文件。SQL Server Management Studio利用这些信息来提出计划,以还原数据库和应用任何事务日志备份。(提醒:在进行任何更新msdb的操作后,例如备份或还原任何数据库后,建议备份msdb。)
(4)tempdb数据库
tempdb系统数据库是一个全局资源,可供连接到SQL Server实例的所有用户使用。tempdb中的操作是最小日志记录操作。这将使事务产生回滚。每次启动SQL Server时都会重新创建tempdb,从而在系统启动时总是保持一个干净的数据库副本。在断开连接时会自动删除临时表和存储过程,并且在系统关闭后没有活动连接。因此tempdb中不会有什么内容从一个SQL Server会话保存到另一个会话。
tempdb数据库可用于保存如下各项内容:
● 显式创建的临时用户对象,例如全局或局部临时表、临时存储过程、表变量或游标。
● SQL Server数据库引擎创建的内部对象,例如,用于存储假脱机或排序的中间结果的工作表。
● 由使用已提交读(使用行版本控制隔离或快照隔离事务)的数据库中数据修改事务生成的行版本。
● 由数据修改事务为实现联机索引操作、多个活动的结果集(MARS)以及AFTER触发器等功能而生成的行版本。
提醒:不允许对tempdb进行备份和还原操作。tempdb的大小可以影响系统性能。例如,如果tempdb的大小太小,则每次启动SQL Server时,系统处理可能忙于数据库的自动增长,而不能支持工作负荷要求。可以通过增加tempdb的大小来避免此开销。
(5)Resource数据库
Resource数据库为只读数据库,它包含了SQL Server中的所有系统对象。SQL Server系统对象(例如sys.objects)在物理上保留在Resource数据库中,但在逻辑上显示在每个数据库的sys架构中。Resource数据库不包含用户数据或用户元数据。
在管理数据库、数据库对象和操作数据时,除了使用SQL Server数据库管理工具外,还可以使用SQL语言来实现。
SQL即结构化查询语言(Structured Query Language),它是为查询和管理关系型数据库管理系统中的数据而专门设计的一种标准语言。SQL最早版本是由IBM公司开发的,它当初叫SEQUEL语言,发展到现在,其名称已变为SQL语言。ANSI组织和ISO组织每隔一段时间会进行修订,并发布相应的SQL语言标准:SQL-86,SQL-89、SQL-92、SQL:1999、SQL:2003、SQL:2006、SQL:2008。
SQL包含不同类型的语言,主要包括如下三种语言:
(1)数据定义语言(Data Definition Language,DDL)
DDL语言用于处理数据库对象和对象的属性,这种对象包括数据库本身,以及其他数据库对象,如表、视图、存储过程索引等。包括的语句(命令)有CREATE、ALTER和DROP。CREATE语句用于创建数据库及其他数据库对象。ALTER语句用于修改数据库及其他数据库对象的属性。DROP语句用于删除数据库及其他数据库对象。
(2)数据操纵语言(Data Manipulation Language,DML)
DML语言用于操纵数据,如对数据的查询、添加、修改和删除。包括的语句有SELECT、INSERT、UPDATE和DELETE。SELECT语句用于根据需求查询符合条件的元组(记录)。INSERT语句用于向表中添加元组(记录)。UPDATE语句用于删除表中的数据库。DELETE语句用于删除表中的元组(记录)。
(3)数据控制语言(Data Control Language,DCL)
DCL语言用于处理权限管理,以提高数据的安全性。包括的语句有GRANT、DENY和REVOKE。GRANT用于授予用户对数据对象的指定权限。DENY用于拒绝用户对数据对象的指定权限。REVOKE用于撤销用户对数据对象的指定权限。
根据项目需求,完成“电子商务系统”的数据库创建和管理工作。实现创建数据库和管理数据库,可以通过两种方法完成:一种是通过SQL Server Management Studio(SSMS)工具,以直观、方便的图形化界面完成,另一种通过编写并执行Transact-SQL(为方便学习,在本教程后续内容中,称为SQL)语句来完成。整个项目单元内容分为7个任务来实现不同的目标,具体的任务内容和能力目标如下:
1.任务内容
任务1:创建数据库。
任务2:查看和修改数据库属性。
任务3:导入与导出数据库。
任务4:脱机与联机数据库。
任务5:分离与附加数据库。
任务6:扩充与收缩数据库。
任务7:复制和删除数据库。
2.能力目标
知识目标:理解系统数据库、数据库文件的相关知识,掌握数据库创建和管理相关的SQL语句语法。
技能目标:熟练使用SSMS工具和SQL语句两种方法完成数据库的创建和管理任务。
任务1 创建数据库
每个SQL Server数据库至少具有两个操作系统文件(数据库文件):一个数据文件和一个事务日志文件。数据文件包含数据和对象,例如表、索引、存储过程和视图。数据文件可分为主要数据文件和次要数据文件,每个数据库只能具有一个主要数据文件,次要数据文件是可选的。事务日志文件包含恢复数据库中的所有事务所需的信息。为了便于分配和管理,可以将数据文件集合起来,放到文件组中。
提醒:默认情况下,数据和事务日志被放在同一个驱动器上的同一个路径下。这是为处理单磁盘系统而采用的方法。但是,在生产环境中,这不是最佳的方法,建议将数据文件和日志文件放在不同的磁盘或者磁盘卷上,且都不选择放在操作系统所处的系统磁盘卷上。
(1)主要数据文件
主要数据文件包含数据库的启动信息,并指向数据库中的其他文件。用户数据和对象可存储在此文件中,也可以存储在次要数据文件中。每个数据库有一个且只能有一个主要数据文件。主要数据文件的建议文件扩展名是“.mdf”。
(2)次要数据文件
次要数据文件是可选的,由用户定义并存储用户数据。通过将每个文件放在不同的磁盘驱动器上,次要文件可用于将数据分散到多个磁盘上。另外,如果数据库超过了单个Windows文件的最大大小,可以使用次要数据文件,这样数据库就能继续增长。次要数据文件的建议文件扩展名是“.ndf”。
(3)事务日志文件
事务日志文件保存用于恢复数据库的日志信息。每个数据库必须至少有一个日志文件。事务日志文件的建议文件扩展名是“.ldf”。
(4)文件组
每个数据库有一个主要文件组,即默认文件组“PRIMARY”。此文件组包含主要数据文件和未放入其他文件组的所有次要文件。可以创建用户定义的文件组,用于将数据文件集合起来,以便于管理、数据分配和放置。
如果在数据库中创建对象时没有指定对象所属的文件组,对象将被分配给默认文件组。不管何时,只能将一个文件组指定为默认文件组。默认文件组中的文件必须足够大,能够容纳未分配给其他文件组的所有新对象。
例如,可以分别在三个磁盘驱动器上创建三个文件Data1.ndf、Data2.ndf和Data3.ndf,然后将它们分配给文件组fgroup1。然后,可以明确地在文件组fgroup1上创建一个表。对表中数据的查询将分散到三个磁盘上,从而提高了性能。
提醒:一个数据文件只能属于一个文件组,事务日志文件不适合文件组。
在创建数据库之前,先应该确定数据库名称、所有者、数据库的文件名称、数据库的文件存储路径、大小,以及文件组。同时,还应该考虑数据库大小的增长情况,以防数据库无限增长时,用尽整个磁盘空间。
1.任务描述
为了存储“电子商务系统”的数据,需创建数据库eshop。分别使用SSMS和SQL语句两种方式创建数据库eshop,创建过程中,各参数如下:
①主数据文件:逻辑名称为“eshop”,物理文件名称为“eshop.mdf”,初始大小为5MB,自动增长,增量为1MB,最大文件大小无限制,存储路径为“E:\eshop”。
②日志文件:逻辑名称为“eshop_log”,物理文件名称为“eshop_log.ldf”,初始大小为1MB,自动增长,增量为10%,最大文件大小为2MB,存储路径为“E:\eshop”。
2.任务实现
(1)使用SSMS工具创建数据库
Step1:打开SSMS窗口,在“对象资源管理器”中,连接到SQL Server数据库引擎实例,然后展开该实例。一般在打开SSMS窗口时,默认已显示“对象资源管理器”,并且已经连接到了SQL Server数据库引擎默认实例,如图3-1所示。如果没有连接到实例,则手动连接,单击“对象资源管理器”中的“连接”,选择“数据库引擎”,然后按步骤就可以完成连接,如图3-2所示。
Step2:在“对象资源管理器”中,右击“数据库”,然后选择“新建数据库”,如图3-3所示。

图3-1 “对象资源管理器”中显示默认实例

图3-2 “对象资源管理器”连接数据库实例

图3-3 “新建数据库”快捷菜单
Step3:此时会打开“新建数据库”窗口,如图3-4所示。在窗口左边有3个选择页,分别是“常规”“选项”和“文件组”。窗口右边则对应选择页的设置参数。

图3-4 “新建数据库”常规设置页
Step4:在“常规”选择页的右边窗口,“数据库名称”文本框中输入“eshop”,如图3-4所示。所有者选择“<默认值>”,“数据文件”区域的各项设置如下:
①逻辑名称:数据库文件的逻辑名称。主数据文件逻辑名称默认为数据库名称,即“eshop”,日志文件逻辑名称默认为“数据库名称_log”,即“eshop_log”。当然,也可以修改它。
②文件类型:指定文件类型是“行数据”,还是“日志”,用以区别保存的是数据信息还是日志信息。
③文件组:设置数据文件所属的文件组,默认只有“PRIMARY”文件组。可以在左边的“文件组”选择页中添加或删除文件组。一个数据文件只能属于一个文件组,日志文件不适用文件组。
④初始大小:设置文件的初始大小,以MB为单位。数据文件默认初始大小为5MB,日志文件默认初始大小为1MB。(提醒:初始大小可根据应用项目的实际需求进行调整。)
⑤自动增长/最大大小:当设置的文件大小不够时,系统会根据设置的增长方式自动增长文件的大小。默认情况下,数据文件自动增长,增量为1MB,最大文件大小无限制。日志文件自动增长,增量为10%,最大文件大小为2MB。可通过单击本设置中的按钮来进行自动增长的设置更改,如图3-5和图3-6所示。(提醒:自动增长的最大文件大小的设置根据实际磁盘空间容量的规划来进行。)

图3-5 更改数据文件的自动增长设置对话框

图3-6 “更改日志文件的自动增长设置”对话框
⑥路径:设置存放数据文件或日志文件的物理路径。默认路径为数据库安装路径下的“DATA”文件夹中,一般建议不要采用默认路径。对数据文件和日志文件进行如下路径设置:单击本设置中的按钮,打开“选择文件夹”对话框,选择路径“E:\eshop”,单击“确定”按钮,如图3-7所示。

图3-7 数据库文件的路径设置
⑦文件名:设置数据文件和日志文件的物理名称,默认情况下,数据文件和日志文件的物理名称和逻辑名称相同,扩展名分别为“.mdf”和“.ndf”。此处可以不需填写,即为默认名称。
Step5:在“选项”选择页的右边窗口,可以设置数据库的排序规则、恢复模式、兼容级别、包含类型,以及其他选项,如图3-8所示。此任务可采用默认值,不做任何设置的修改。

图3-8 数据库的“选项”设置
Step6:在“文件组”选择页的右边窗口,可以添加、删除文件组。注意“PRIMARY”文件为默认存在的文件组,不可以删除。一般情况下,不需要再添加多个文件组,使用默认文件组即可,如图3-9所示。

图3-9 数据库的“文件组”设置
Step7:完成上述操作后,单击“确定”按钮,将关闭“新建数据库”窗口,数据库创建成功,并可以在“对象资源管理器”的窗口中看到刚才成功创建的数据库“eshop”,如图3-10所示。

图3-10 新建的eshop数据库
(2)使用T-SQL语句方式创建数据库
Step1:在SSMS窗口的工具栏上,单击“新建查询”按钮,打开“SQL编辑器”窗口。
Step2:在“SQL编辑器”窗口中输入下列语句创建数据库eshop。

Step3:在“SQL编辑器”工具栏中单击“分析”按钮,或者选择菜单命令“查询”→“分析”,或者同时按【Ctrl】键和【F5】键,对SQL语句进行语法分析,确保上述语句的语法正确。
Step4:在“SQL编辑器”工具栏中单击“执行”按钮,或者选择菜单命令“查询”→“执行”,或者按【F5】键,以此来执行SQL语句。
任务2 查看和修改数据库属性
在SQL Server 2012中创建完数据库后,可以查看数据库属性,并可根据实际需求修改数据库的属性和重命名数据库,修改数据库属性后,修改内容将立即生效。
1.任务描述
分别使用SSMS和Transact-SQL两种方式完成:查看和修改数据库eshop的属性;重命名数据库名为eshop_new。(注:为不影响后续的实验,完成重命名数据库任务后,建议把数据库重新改回为eshop。)
2.任务实现
(1)使用SSMS工具查看和修改数据库属性
Step1:打开SSMS窗口,在“对象资源管理器”中,连接到SQL Server数据库引擎实例,然后展开该实例。
Step2:展开“数据库”,右击eshop数据库,如图3-11所示。

图3-11 查看数据库属性
Step3:选择“属性”命令,即可打开eshop数据库的“数据库属性”窗口,即可查看、更改数据库的常规、文件、文件组、选项、更改跟踪、权限、扩展属性、镜像、事务日志传送等各个属性信息,如图3-12所示。

图3-12 eshop的“数据库属性”窗口
(2)使用T-SQL方式查看数据库属性
Step1:在SSMS窗口的工具栏上,单击“新建查询”按钮,打开“SQL编辑器”窗口。
Step2:在“SQL编辑器”窗口输入下列两条语句其中之一可查询数据库eshop的属性。
语句一:select * from sys.databases where name='eshop'
语句二:sp_helpdb eshop
Step3:在“SQL编辑器”中分别执行以上两条语句,语句一执行的结果如图3-13所示,语句二执行的结果如图3-14所示。

图3-13 通过查询sys.databases来查看eshop数据库属性

图3-14 通过sp_helpdb存储过程来查看eshop数据库属性
(3)使用SSMS工具重命名数据库
Step1:打开SSMS窗口,在“对象资源管理器”中,连接到SQL Server数据库引擎实例,然后展开该实例。
Step2:展开“数据库”,右击eshop数据库,选择“重命名”命令,把eshop修改为eshop_new即可。(提醒:在重命名数据库前,应确保没有任何用户正在使用数据库。此操作只更改了数据库的逻辑名,对于该数据库的文件没有任何影响。)
(4)使用T-SQL方式重命名数据库和修改数据库属性
可通过ALTER DATABASE语句来重命名数据库和修改数据库属性。如将eshop数据库重命名eshop_new,将eshop改为单用户访问。
Step1:在SSMS窗口的工具栏上,单击“新建查询”按钮,打开“SQL编辑器”窗口。
Step2:在“SQL编辑器”窗口中输入并执行下列语句来重命名数据库,将eshop重命名为eshop_new。(提醒:在重命名数据库前,应确保没有任何用户正在使用数据库。此操作只更改了数据库的逻辑名,对于该数据库的文件没有任何影响。)
ALTER DATABASE eshop MODIFY NAME=eshop_new
Step3:在“SQL编辑器”窗口中输入并执行下列语句,将eshop改为单用户访问。(提醒:在修改为单用户访问后,为避免影响后续的实验内容,应重新改为多用户访问,单用户访问模式一般是在进行数据库维护时使用,默认是多用户访问。)
ALTER DATABASE eshop SET SINGLE_USER --修改eshop数据库为单用户访问模式
ALTER DATABASE eshop SET MULTI_USER --修改eshop数据库为多用户访问模式
任务3 导入与导出数据库
数据库的导入和导出是实现数据从源向目标进行转移和复制的简单、方便的途径之一。在实现导入和导出的过程中可以实现不同数据格式之间的转换,如实现平面文件、Excel文件、Access数据文件、其他关系型数据库(如Oracle)与SQL Server数据库之间的转换。当然,也可以在不同的SQL Server数据库之间进行转移。导入是将数据库之外的数据导入到数据库中;导出是导入的反操作,将SQL Server数据库的数据导出到外部某种数据形式。
1.任务描述
创建包含表3-1中的数据的Microsoft Excel表格文件supplier0301.xls,然后导入到数据库eshop中,数据表的名称为“supplier”。然后将数据库表“supplier”数据导出,保存到supplier0302.xls文件中。
表3-1 “supplier0301”表中的数据

2.任务实现
(1)使用SSMS工具的“导入导出向导”进行导入
Step1:打开SSMS窗口,在“对象资源管理器”中,连接到SQL Server数据库引擎实例,然后展开该实例。
Step2:展开“数据库”,右击eshop数据库,选择“任务”→“导入数据库”,进入导入导出向导欢迎界面,单击“下一步”按钮,进入“选择数据源”界面。选择数据源的数据类型为“Microsoft Excel”,如图3-15所示。设置“Excel文件路径”和“Excel版本”,如图3-16所示。

图3-15 “选择数据源”界面

图3-16 设置Excel数据源
Step3:单击“下一步”按钮,进入“选择目标”界面。确定目标的数据类型为“SQL Server Native Client 11.0”,以及服务器名、身份验证、数据库等各参数。如图3-17所示。

图3-17 设置“选择目标”界面各参数
Step4:单击“下一步”按钮,进入“指定表复制或查询”界面,选择“复制一个或多个表或视图的数据”,如图3-18所示。

图3-18 “指定表复制或查询”界面
Step5:单击“下一步”按钮,进入“选择源表和源视图”界面,选择源表,目标表的名称可以选择默认,也可以修改名称,如图3-19所示。

图3-19 “选择源表和源视图”界面
Step6:单击“预览”按钮,可以预览已选择表中的数,如图3-20所示。预览完毕,单击“确定”按钮。重新返回“选择源表和源视图”界面。

图3-20 “预览数据”界面
Step7:单击“下一步”按钮,进入“保存并运行包”界面,如图3-21所示。
Step8:选中“立即运行”复选框,并单击“下一步”按钮,进入“完成该向导”界面。如图3-22所示。

图3-21 “保存并运行包”界面

图3-22 “完成该向导”界面
Step9:单击“完成”按钮,进入“执行”界面,执行完毕后显示“执行成功”,然后单击“关闭”按钮,完成导入操作。如图3-23所示。

图3-23 “执行”界面
Step10:展开数据库“eshop”→“表”,检查表“supplier”存在,并可打开表,检查数据都已经导入,如图3-24所示。

图3-24 检查数据是否导入成功
(2)使用SSMS工具的“导入导出向导”进行导出
Step1:打开SSMS窗口,在“对象资源管理器”中,连接到SQL Server数据库引擎实例,然后展开该实例。
Step2:展开“数据库”,右击eshop数据库,选择“任务”→“导出数据库”,进入导入导出向导欢迎界面,单击“下一步”按钮,进入“选择数据源”界面。选择数据源的数据类型为“SQL Server Native Client 11.0”,同时确认服务器名称、身份验证方式、数据库等参数,如图3-25所示。

图3-25 “选择数据源”界面
Step3:单击“下一步”按钮,进入“选择目标”界面。目标的数据类型选择为“Microsoft Excel”,“Excel文件路径”的输入框中,输入“e:\eshop\supplier0302.xls”(注:也可以通过“浏览”按钮,选择已存在的一个空白excel文件),选择Excel版本为“Microsoft Excel97-2003”,如图3-26所示。

图3-26 设置“选择目标”界面各参数
Step4:单击“下一步”按钮,进入“指定表复制或查询”界面,选择“复制一个或多个表或视图的数据”,如图3-27所示。

图3-27 “指定表复制或查询”界面
Step5:单击“下一步”按钮,进入“选择源表和源视图”界面,选择源表,目标表的名称可以选择默认,也可以修改名称,如图3-28所示。

图3-28 “选择源表和源视图”界面
Step6:单击“预览”按钮,可以预览已选择表中的数据。预览完毕,单击“确定”按钮,如图3-29所示,重新返回“选择源表和源视图”界面。

图3-29 “预览数据”界面
Step7:单击“下一步”按钮,进入“查看数据类型映射”界面,如图3-30所示。

图3-30 “查看数据类型映射”界面
Step8:单击“下一步”按钮,进入“保存并运行包”界面,如图3-31所示。

图3-31 “保存并运行包”界面
Step9:选中“立即运行”复选框,并单击“下一步”按钮,进入“完成该向导”界面,如图3-32所示。

图3-32 “完成该向导”界面
Step10:单击“完成”按钮,进入“执行”界面,执行完毕后显示“执行成功”,然后单击“关闭”按钮,完成导出操作,如图3-33所示。
Step11:打开文件夹“e:\eshop\”,检查文件“supplier0302.xls”是否存在,并打开此文件,检查文件中的数据记录,确保数据全部已经导出到此文件。

图3-33 “执行”界面
任务4 脱机与联机数据库
数据库总是处于一个特定的状态中。联机(ONLINE)和脱机(OFFLINE)是数据库的两种重要状态。联机状态,可以对数据库进行访问,即使可能尚未完成恢复的撤销阶段,主文件组仍处于在线状态。脱机状态,数据库无法使用。数据库由于显式的用户操作而处于离线状态,并保持离线状态直至执行了其他的用户操作。例如,可能会让数据库离线以便将文件移至新的磁盘。然后,在完成移动操作后,使数据库恢复到在线状态。
1.任务描述
对数据库eshop分别采用SSMS工具和T-SQL方式进行脱机和联机操作。当eshop数据库处于联机状态时,可以对eshop数据库进行脱机操作。当eshop数据库处于脱机状态时,可以对eshop数据库进行联机操作。并验证eshop处于联机时,可以进行访问操作,当eshop处于脱机时,不能进行访问操作。
2.任务实现
(1)使用SSMS工具进行脱机和联机操作
Step1:打开SSMS窗口,在“对象资源管理器”中,连接到SQL Server数据库引擎实例,然后展开该实例,并展开“数据库”,可以看到eshop处于联机状态。
Step2:单击工具栏上的“新建查询”,打开查询编辑器,输入下列SQL语句并执行,以验证eshop可以被正常访问,如图3-34所示。

Step3:右击eshop数据库,选择“任务”→“脱机”,eshop立即处于脱机状态,如图3-35所示。

图3-34 eshop联机状态,能正常访问

图3-35 对eshop进行脱机操作
Step4:再在查询编辑器中执行Step2中的SQL语句,以验证eshop不能被正常访问,如图3-36所示。
Step5:右击eshop数据库,选择“任务”→“联机”,eshop立即处于联机状态,如图3-37所示。
提醒:数据库处于联机状态时,不能对该数据库的所有数据库文件进行复制和移动。而数据库处于脱机状态时,可以对该数据库的所有数据库文件进行复制和移动。

图3-36 eshop脱机状态,不能正常访问

图3-37 对eshop进行联机操作
(2)使用T-SQL方式进行脱机和联机操作
Step1:在SSMS窗口的工具栏上,单击“新建查询”按钮,打开“SQL编辑器”窗口。
Step2:在“SQL编辑器”窗口中输入并执行下列语句进行脱机操作,如图3-38所示。


图3-38 SQL语句执行脱机操作
Step3:在“SQL编辑器”窗口中输入并执行下列语句进行联机操作,如图3-39所示。


图3-39 SQL语句执行联机操作
任务5 分离与附加数据库
分离数据库是指将数据库从SQL Server实例中删除,分离数据库的数据和事务日志文件。分离后,数据文件和事务日志文件仍存在,且数据文件中的数据和事务日志文件中的日志保持不变。之后,就可以使用这些文件将数据库附加到原实例和其他任何SQL Server实例。如果要将数据库更改到同一计算机的不同SQL Server实例或要移动数据库,分离和附加数据库是很有用且很方便的操作。
1.任务描述
分别采用SSMS工具和T-SQL语句方式对eshop数据库进行分离和附加。先分离eshop数据库,然后把eshop数据库的所有数据库文件,移动到“e:\eshop1”文件夹下,然后再进行附加。当然也可以把分离后的所有数据库文件移动到另一台SQL Server 2012服务器上,然后再附加,实现数据库在不同服务器上的移动。
2.任务实现
(1)使用SSMS工具分离和附加数据库
Step1:打开SSMS窗口,在“对象资源管理器”中,连接到SQL Server数据库引擎实例,然后展开该实例。
Step2:展开“数据库”,右击eshop数据库,选择“任务”→“分离”,进入“分离数据库”界面,如图3-40所示。单击“确定”按钮,完成分离,实例中看不到eshop数据库。

图3-40 “分离数据库”界面
Step3:将数据库文件eshop.mdf和eshop_log.ldf从“e:\eshop”文件夹移动到“e:\eshop1”文件夹下。
Step4:在“资源对象管理器”窗口中,右击“数据库”,如图3-41所示。

图3-41 右击“数据库”
Step5:选择“附加”命令,进入“附加数据库”界面。单击“添加”按钮,选择MDF文件“E:\eshop1\eshop.mdf”。在“‘eshop’数据库详细信息”区域,将自动出现eshop数据库的所有文件,如果某个文件没出现,则需单击按钮手动选择该文件,如图3-42所示。
Step6:单击“确定”按钮,完成eshop数据库的附加,在实例中将能看到eshop数据库,并可检查数据是完整的。
提醒:要想成功附加数据库,必须保证数据库的所有文件完整无损。

图3-42 “附加数据库”界面
(2)使用T-SQL方式分离和附加数据库
Step1:在查询编辑器中输入下列语句并执行,完成eshop数据库的分离,如图3-43所示。
EXEC sp_detach_db eshop

图3-43 T-SQL分离数据库
Step2:在查询编辑器中输入下列语句并执行,完成eshop数据库的附加(分离后把数据库文件移动到“e:\eshop1”文件夹下),如图3-44所示。


图3-44 T-SQL附加数据库
注:也可以通过执行下列SQL语句进行附加,读者可自己进行。

任务6 扩充与收缩数据库
在SQL Server 2012的使用过程中,随着数据的不断增加,需要更多地数据库空间来存放有效数据,则需要通过数据库容量的扩充或者收缩数据库和数据文件来满足需求。
1.任务描述
对数据库的扩充可以通过修改数据库文件的初始大小和增量值来实现,还可以通过添加次要数据文件来实现。本任务要求对数据库eshop分别采用SSMS工具和T-SQL方式进行扩充和收缩操作。具体实现的操作任务如下:
①将数据库eshop的主数据文件的初始大小修改为10MB,增量增大至8MB。
②将数据库eshop的事务日志文件的初始大小修改为3MB,增量增大至15%。
③为数据库eshop添加次要数据文件,初始大小为8MB,增量为3MB。
④收缩数据库eshop数据库和数据文件,以便释放为使用的空闲空间。
2.任务实现
(1)使用SSMS工具修改数据库的初始大小和增量,添加数据文件
Step1:打开SSMS窗口,在“对象资源管理器”中,连接到SQL Server数据库引擎实例,然后展开该实例。
Step2:展开“数据库”,右击eshop数据库,选择“属性”,打开“数据库属性-eshop”窗口,在该窗口的左侧选择页中选择“文件”,在右侧进行如下修改:
● 在“数据库文件”区域的数据文件的“初始大小”项中,将主数据文件的初始大小修改为10MB,将事务日志文件的初始大小修改为3MB,如图3-45所示。

图3-45 修改数据库文件的初始大小
● 在“自动增长/最大大小”项中,单击按钮,打开“更改eshop的自动增长设置”对话框,在主数据文件的对话框中,“文件增长”的“按MB ”设为8,单击“确定”按钮返回“数据库属性-eshop”对话框,如图3-46所示。在事务日志文件的对话框中,“文件增长”的按“按百分比”设为15%,单击“确定”按钮返回“数据库属性-eshop”对话框,如图3-47所示。

图3-46 主数据文件“文件增长”设置

图3-47 事务日志文件“文件增长”设置
● 在“数据库属性-eshop”对话框中,在左侧栏中选择“文件”,然后在右侧窗口单击“添加”按钮,添加新的数据文件,新添加的数据文件的设置参数是:“逻辑名称”为“eshop01”,“初始大小”为“8MB”,“增量”为“3MB”,“路径”为“e:\eshop1”。
Step3:单击“确定”按钮,完成数据库eshop的扩充。
(2)使用T-SQL方式修改数据库的初始大小和增量,添加数据文件
Step1:在查询编辑器中,输入并执行下列语句修改主数据文件的初始大小和增量。

Step2:在查询编辑器中,输入并执行下列语句修改事务日志文件的初始大小和增量。


提醒:采用T-SQL语句修改数据库文件的初始大小时,指定的大小必须大于当前大小。
Step3:在查询编辑器中,输入并执行下列语句添加次要数据文件。

(3)使用SSMS工具收缩数据库
Step1:打开SSMS窗口,在“对象资源管理器”中,连接到SQL Server数据库引擎实例,然后展开该实例。
Step2:展开“数据库”,右击eshop数据库,选择“任务”→“收缩”→“数据库”,如图3-48所示。打开“收缩数据库-eshop”窗口,在该对话框中选中“在释放未使用的空间前重新组织文件”复选框,然后在“收缩后文件中的最大可用空间”中设置一个的值,该值范围为0至99,这里设置为65,即收缩后文件中的最大可用空间为65%,如图3-49所示。

图3-48 收缩数据库
Step3:单击“确定”按钮,关闭“收缩数据库-eshop”对话框,完成数据库eshop的收缩。
提醒:收缩后的数据库不能小于数据库创建时的初始大小。
(4)使用SSMS工具收缩数据库文件
Step1:打开SSMS窗口,在“对象资源管理器”中,连接到SQL Server数据库引擎实例,然后展开该实例。

图3-49 “收缩数据库-eshop”窗口
Step2:展开“数据库”,右击eshop数据库,选择“任务”→“收缩”→“文件”,打开“收缩文件-eshop”窗口,在该窗口中选择文件类型和文件名,在“收缩操作”区域中选择“释放未使用的空间”单选按钮,如图3-50所示。

图3-50 “收缩文件-eshop”对话框
Step3:单击“确定”按钮,关闭“收缩文件-eshop”窗口,完成数据库文件的收缩。
提醒:主数据文件不能收缩到小于model数据库中的主文件的大小。
(5)使用T-SQL方式收缩数据库
在查询编辑器中,输入并执行下列语句收缩数据库。
DBCC SHRINKDATABASE(eshop,65)
其中:65是指减少eshop数据库中数据文件和日志文件的大小并允许数据库中有65%的可用空间。
(6)使用T-SQL方式收缩数据库文件
在查询编辑器中,输入并执行下列语句收缩数据库。
DBCC SHRINKFILE(eshop,7) --收缩数据文件eshop
DBCC SHRINKFILE(eshop_log,4) --收缩事务日志文件eshop_log
其中:7是指将eshop数据库中名为eshop的数据文件的大小收缩到7MB;4是指将eshop数据库中名为eshop_log的事务日志文件的大小收缩到4MB。
任务7 复制和删除数据库
在某些情况下,为了用于测试、检查一致性、开发软件、运行报表、创建镜像数据库,或者将数据库用于远程分支操作,需要通过数据库的复制实现将数据库从一台计算机移植到另一台计算机上。当然也可以在同一台计算机上对数据库进行复制。
当某用户的数据库不再需要,或者数据库已经迁移到其他数据库服务器上时,可以删除该数据库。当删除数据库时,不但数据库从当前实例中删除,而且所有数据库文件(主数据文件、次要数据文件、事务日志文件)也将从操作系统中物理性的删除了。所以删除数据库之前需谨慎考虑。
1.任务描述
实现数据库的复制,最佳的方式是使用复制数据库向导,但在进行数据库复制时,先应启动“SQL Server代理”服务。本任务的具体实现操作如下:
①使用复制数据库向导进行数据库复制,复制eshop数据库,新数据库名为eshop_new。
②使用SSMS工具删除数据库eshop_new。
③使用T-SQL方式删除数据库eshop。
2.任务实现
(1)使用复制数据库向导复制数据库
Step1:打开SSMS窗口,在“对象资源管理器”中,连接到SQL Server数据库引擎实例,然后展开该实例。
Step2:启动“SQL Server代理”服务。在“对象资源管理器”中,右击“SQL Server代理”,选择“启动”,如图3-51所示。(注:也可以通过配置管理器来启动“SQL Server代理”服务。),此时弹出图3-52所示的提示信息框,单击“是”按钮即可启动SQL Server代理服务。启动成功后,其左侧图标变为形状。

图3-51 启动SQL Server代理

图3-52 启动“SQL Server代理”服务确认提示信息框
Step3:展开“数据库”,右击eshop数据库,选择“任务”→“复制数据库”,如图3-53所示。启动复制数据库向导,如图3-54所示。

图3-53 选择“复制数据库”向导

图3-54 “复制数据库向导”欢迎界面
Step4:单击“下一步”按钮,进入“选择源服务器”界面,选择源服务器(本例为“DB-SVR”),身份验证方式选择“使用Windows身份验证”,如图3-55所示。

图3-55 “选择源服务器”界面
Step5:单击“下一步”按钮,进入“选择目标服务器”界面,目标服务器为本地服务器,即“(local)”,如图3-56所示。身份验证方式选择“使用Windows身份验证”。此例目标服务器和源服务器相同,当然,也可以是不同服务器。

图3-56 “选择目标服务器”界面
Step6:单击“下一步”按钮,进入“选择传输方法”界面。选择“使用分离和附加方法”,如图3-57所示。

图3-57 “选择传输方法”界面
Step7:单击“下一步”按钮,进入“选择数据库”界面,选择“复制eshop数据库”,如图3-58所示。

图3-58 “选择数据库”界面
Step8:单击“下一步”按钮,进入“配置目标数据库”界面,将目标数据库名称设置为“eshop_new”,目标文件设置为“e:\eshop_new”,选择“如果目标上存在同名的数据库或文件则停止传输”,如图3-59所示。

图3-59 “配置目标数据库”界面
Step9:单击“下一步”按钮,进入“配置包”界面,选择默认设置,如图3-60所示。

图3-60 “配置包”界面
Step10:单击“下一步”按钮,进入“安排运行包”界面,选择“立即运行”,在“Integration Services代理账户”的下拉框中选择“SQL Server代理服务账户”选项,如图3-61所示。

图3-61 “安排运行包”界面
Step11:单击“下一步”按钮,进入“完成该向导”界面,如图3-62所示。

图3-62 “完成该向导”界面
Step12:单击“完成”按钮,进入“正在执行操作”界面,操作成功后,出现图3-63所示的界面。单击“关闭”按钮,退出复制数据库向导。

图3-63 “正在执行操作”界面
Step13:在“对象资源管理器”窗口中,右击“数据库”,选择“刷新”,即可看到刚才复制成功的数据库eshop_new,如图3-64所示。
(2)使用SSMS工具删除数据库
Step1:打开SSMS窗口,在“对象资源管理器”中,连接到SQL Server数据库引擎实例,然后展开该实例。
Step2:展开“数据库”,右击eshop_new数据库,选择“删除”,如图3-65所示。单击“删除”,出现图3-66所示的“删除对象”界面,默认已选中“删除数据库备份和还原历史记录信息”复选框,并选择“关闭现有连接”复选框。

图3-64 查看复制成功的数据库

图3-65 删除数据库

图3-66 “删除对象”界面
Step3:单击“确定”按钮,即可完成数据库的删除。
(3)使用T-SQL方式删除数据库
在查询编辑器中,输入并执行下列SQL语句执行删除数据库eshop_new。
DROP DATABASE eshop_new --删除数据库eshop_new