• 沒有找到結果。

SQL Server数据库及应用(第二版) - 万水书苑-出版资源网

N/A
N/A
Protected

Academic year: 2021

Share "SQL Server数据库及应用(第二版) - 万水书苑-出版资源网"

Copied!
26
0
0

加載中.... (立即查看全文)

全文

(1)

第 3 章 数据库的创建和管理

本章学习目标

数据库是 SQL Server 用于存放数据和数据库对象的容器,它是 SQL Server 最基 本的操作对象之一。日志文件是 SQL Server 记录对数据库操作的地方。对数据库以 及相关日志文件的管理是 DBA 的重要职责。本章主要介绍数据库的创建和管理方法。 通过本章的学习,读者应该:  理解数据库的存储结构  了解 SQL Server 2008 数据库文件和文件组  熟练掌握创建数据库的方法  熟练掌握修改、删除数据库的方法  掌握数据库更名、修改大小的方法  掌握分离和附加数据库

3.1 SQL Server 数据库的结构

数据库的存储结构分为逻辑存储结构和物理存储结构两种。 数据库的逻辑存储结构是指数据库是由哪些逻辑对象组成的,SQL Server 2008 中的逻辑 对象主要包括数据库、数据表、事务日志、视图、文件组、索引、存储过程、函数、触发器、 约束,还有用户、角色、架构等,各种不同的数据库逻辑对象组合在一起,构成了数据库的逻 辑存储结构。 数据库的物理存储结构指的是保存数据库各种逻辑对象的物理文件是如何在磁盘上存储 的,数据库在磁盘上是以文件为单位进行存储的,SQL Server 将数据库映射为一组操作系统文 件。在 SQL Server 中创建的每一个数据库都至少会在磁盘上创建两个物理文件与之对应:一 个数据文件和一个事务日志文件。数据文件用于储存数据,日志文件用于存储数据库恢复的日 志信息。日志信息从不与数据混合在相同的文件中,而且各文件仅在一个数据库中使用。 3.1.1 SQL Server 2008 数据库和文件 SQL Server 数据库是数据库对象的容器,它以文件的形式存储在磁盘上。 1.SQL Server 2008 数据库文件类型 SQL Server 2008 的数据库文件根据其作用不同,可以分为三种类型: (1)主数据文件(Primary file)。主数据文件用来存储数据库的数据和数据库的启动信息。 它是数据库的起点,指向数据库中的其他文件。每个数据库都有一个主数据文件,主数据文件 的推荐文件扩展名是.mdf。 (2)辅助数据文件(Secondary file)。除主数据文件以外的所有其他数据文件都是辅助数

(2)

据文件。某些数据库可能不含有任何辅助数据文件,而有些数据库则含有多个辅助数据文件。 辅助数据文件的推荐文件扩展名是.ndf。 (3)事务日志文件(Transaction file)。日志文件包含着用于恢复数据库的所有日志信息。 每个数据库必须至少有一个日志文件,当然也可以有多个。SQL Server 2008 事务日志采用提 前写入的方式,即对数据库的修改先写入事务日志中,然后再写入数据库。日志文件的推荐文 件扩展名是.ldf。 SQL Server 2008 不强制使用.mdf、.ndf 和.ldf 文件扩展名,但使用它们有助于标识文件的 各种类型和用途。 在 SQL Server 2008 中,数据库中所有文件的位置都记录在数据库的主数据文件和 master 数据库中。 SQL Server 2008 的文件拥有两个名称,即逻辑文件名和物理文件名。 逻辑文件名是在所有 T-SQL 语句中引用物理文件时所使用的名称。逻辑文件名必须符合 SQL Server 标识符规则,而且在数据库中的逻辑文件名必须是唯一的。 物理文件名是包括目录路径的物理文件名。它必须符合操作系统文件命名规则。假如按 照系统的默认设置安装了 SQL Server 2008,则对于 master 系统数据库,master 为其逻辑名, 而其对应的数据库物理文件名为“C:\Program Files\Microsoft SQL Server\MSSQL.1\ MSSQL \Data\master.mdf”,其对应的日志文件名为“C:\Program Files\Microsoft SQL Server\MSSQL.1\ MSSQL\Data\mastlog.ldf”。

2.数据库文件组

为了便于分配和管理,SQL Server 允许将多个文件归纳为一组,并赋予一个名称,这就是 文件组。可以利用文件组帮助实现某些数据布局和管理任务,例如备份和还原数据库的操作。

SQL Server 2008 中的数据库文件组分为主文件组(Primary File Group)和用户定义文件 组(Use Defined Group)。

(1)主文件组,包含主要数据库文件和任何没有明确指派给其他文件组的其他文件。数 据库的系统表都包含在主文件组中。

(2)用户定义文件组,在 CREATE DATABASE 或 ALTER DATABASE 语句中,使用 FILEGROUP 关键字指定的文件组。 一个文件只能存在于一个文件组中,一个文件组也只能被一个数据库使用;日志文件是 独立的,它不能作为任何文件组的成员。在没有指定用户定义文件组的情况下,所有数据文件 都包含在主文件组中。 3.1.2 SQL Server 数据库与系统表 SQL Server 维护一组系统级数据库(称为“系统数据库”),这些数据库对于服务器实例的 运行至关重要。这些系统数据库的文件存储在 Microsoft SQL Server 默认安装目录下的 “MSSQL.1\MSSQL”子目录的 Data 文件夹中,各个系统数据库的主要功能如下: 1.master 数据库

不管是哪一版本或是定制安装的 SQL Server 都有 master 数据库,master 数据库是 SQL Server 的主数据库,记录了 SQL Server 的所有系统级信息。例如,在服务器上新建数据库, 则在 master 数据库的 sysdatabases 表中加入该项。所有扩展的存储过程和系统存储过程都存储 在 master 数据库中,而不管该存储过程用于哪一个数据库。此外,master 数据库还记录了所

(3)

有其他数据库的存在、数据库文件的位置以及 SQL Server 的初始化信息。因此,如果 master 数据库不可用,则 SQL Server 无法启动。在 SQL Server 2008 中,系统对象不再存储在 master 数据库中,而是存储在 Resource 数据库中。

2.model 数据库

model 数据库是创建新数据库的模板。如果要想改变新建数据库的样式,则可以根据用户 需要更改 model 数据库。由于 model 数据库用作其他任意数据库的模板,因此 model 数据库必 须始终存在于 SQL Server 系统中,禁止删除它。注意:更改 model 数据库会引起其他一些问 题,强烈建议不要对它进行修改。 3.msdb 数据库 msdb 数据库由 SQL Server 代理用于计划警报和作业,以及记录操作员信息的数据库。msdb 还包含历史记录表,例如备份和还原历史记录表。也可以由其他功能(如 Service Broker 和数 据库邮件)使用。 4.tempdb 数据库 用于保存临时或中间结果集的工作空间。在执行复杂或者大型的查询操作时,如果 SQL Server 需要创建一些中间表来完成,那它就在 tempdb 数据库中进行。在创建临时表时,即使 是在当前数据库中创建的这些表,实际上也是在 tempdb 数据库中创建的。只要需要临时保存 数据,就很可能将数据保存在 tempdb 数据库中。 tempdb 数据库与其他数据库大相径庭。不仅数据库中的对象是临时的,连数据库本身也 是临时的。每次启动 SQL Server 实例时,都会创建临时数据库 tempdb,tempdb 数据库是系统 中唯一完全重建的数据库。服务器实例关闭时,将永久删除 tempdb 中的所有数据。 5.Resource 数据库

Resource 数据库是只读数据库,它包含了 SQL Server 2008 中的所有系统对象。SQL Server 系统对象(例如 sys.objects)在物理上存在于 Resource 数据库中,但在逻辑上,它们出现在每 个数据库的 sys 架构中。Resource 数据库不包含用户数据或用户元数据。

3.2 创建数据库

若要创建数据库,必须确定数据库的名称、所有者、大小以及存储该数据库的文件和文 件组。 在创建数据库之前,应注意下列事项:

 若要创建数据库,必须至少拥有 CREATE DATABASE、CREATE ANY DATABASE 或 ALTER ANY DATABASE 权限。

 创建数据库的用户将成为该数据库的所有者。

 对于一个 SQL Server 服务器实例,最多可以创建 32,767 个数据库。

 数据库名称必须遵循为标识符指定的规则,最好使用有意义的名称命名数据库。

 SQL Server 使用一个模板数据库 model 来创建新的数据库,model 数据库中的所有 用户定义对象都将复制到所有新创建的数据库中。可以向 model 数据库中添加任何 对象(例如表、视图、存储过程和数据类型),以将这些对象包含到所有新创建的 数据库中。

(4)

3.2.1 使用 SSMS 创建数据库 使用 SSMS 创建数据库的步骤如下: (1)打开 SSMS,在对象资源管理器窗口中,展开某个已连接的 SQL Server 服务器实例, 并在其中的“数据库”文件夹上右击,如图 3-1 所示。 图 3-1 新建数据库选择对话框 (2)从弹出的快捷菜单中选择“新建数据库”选项,打开“新建数据库”对话框,如图 3-2 所示。 图 3-2 “新建数据库”对话框 (3)在“新建数据库”对话框中,窗口左边有三个选择页,分别是“常规”、“选项”和 “文件组”。在“常规”选项对应的窗口右部,要求用户输入数据库名称、数据库所有者、数 据库文件和事务日志文件的逻辑名称、初始大小、存储在磁盘上的位置、文件增长方式以及数 据库文件所属的文件组等信息。在这个页面中用户也可以根据需要单击“添加”按钮,添加新 的数据库文件。

(5)

(4)单击“选项”,显示的界面如图 3-3 所示。这里可以设置数据库的排序规则、恢复模 式、兼容级别以及其他选项设置。 图 3-3 创建数据库对话框中“选项”对应的窗口 (5)单击“文件组”,显示的界面如图 3-4 所示。在这里可以添加新的文件组,或对已有 的文件组进行属性设置。 图 3-4 创建数据库对话框中“文件组”对应的窗口 (6)在“新建数据库”对话框的各个选项页面中设置好相关参数值,这里输入数据库的

(6)

名称为“AWLT”,其他选项取系统的默认参数值,并单击“确定”按钮,即可创建一个新的 AWLT 数据库。 (7)AWLT 数据库创建成功后,在“对象资源管理器”窗口中就可以看到此数据库对象 了,如图 3-5 所示。 图 3-5 新创建的数据库显示结果窗口 3.2.2 使用 T-SQL 语句创建数据库 可以使用 T-SQL 中的 CREATE DATABASE 语句来创建数据库。其语法格式如下:

CREATE DATABASE database_name

[ON [PRIMARY] [<filespec>[,…n][,<filegroupspec>[,…n]]] [LOG ON {<filespec>[,…n]}] 说明:在 T-SQL 语法中,用[]括起来的内容表示是可选的;用[,…n]表示重复前面的内 容;用< >括起来表示在实际编写语句时,用相应的内容替代;用{ }括起来表示是必选的;类 似 A|B 的格式,表示 A 和 B 只能选择一个,不能同时都选。 CREATE DATABASE 语句中各参数的说明如下:  database_name:新数据库的名称。数据库名称在 SQL Server 的实例中必须唯一,并 且必须符合标识符规则。database_name 最多可以包含 128 个字符。如果未指定数据 文件的名称,则 SQL Server 使用 database_name 作为 logical_file_name 和 os_file_name。

 ON:指定显式定义下存储数据库数据部分的磁盘文件(数据文件)。

 PRIMARY:指定关联的<filespec>列表为主文件。在主文件组的<filespec>项中指定的 第一个文件将成为主文件。一个数据库只能有一个主文件。如果没有指定 PRIMARY, 那么 CREATE DATABASE 语句中列出的第一个文件将成为主文件。

 LOG ON:指定显式定义下用来存储数据库日志的磁盘文件(日志文件)。LOG ON 后跟以逗号分隔的用以定义日志文件的<filespec>项列表。如果没有指定 LOG ON, 将自动创建一个日志文件,其大小为该数据库的所有数据文件大小总和的 25%或 512 KB,取两者之中的较大者。

 <filespec>:控制文件属性,代表数据文件或日志文件,其语法格式如下:

<filespec>::= {(

(7)

NAME=logical_file_name, FILENAME='os_file_name' [,SIZE=size[KB|MB|GB|TB]] [,MAXSIZE={max_size[KB|MB|GB|TB]|UNLIMITED}] [,FILEGROWTH=growth_increment[KB|MB|GB|TB|%]] )[,...n] } 其中,各选项含义如下:  logical_file_name:指定文件的逻辑名称。logical_file_name 必须在数据库中唯一,必 须符合标识符规则。

 os_file_name:指定操作系统(物理)路径和文件名称。执行 CREATE DATABASE 语句前,指定路径必须存在。

 size:指定文件的初始大小。如果没有为主文件提供 size,则数据库引擎将使用 model 数据库中的主文件的大小。如果指定了辅助数据文件或日志文件,但未指定该文件的 size,则数据库引擎将以 1 MB 作为该文件的大小。为主文件指定的大小至少应与 model 数据库的主文件大小相同。可以使用千字节(KB)、兆字节(MB)、千兆字节 (GB)或兆兆字节(TB)后缀。默认值为 MB。size 是整数值,不包括小数。  max_size:指定文件可增大到的最大字节数。可以使用 KB、MB、GB 和 TB 后缀, 默认值为 MB。如果不指定 max_size,则文件将增长到磁盘满。  UNLIMITED:设置文件的增长仅受磁盘空间的限制。在 SQL Server 2008 中,指定 为不限制增长的日志文件的最大字节数为 2TB,而数据文件的最大字节为 16TB。  growth_increment:指定文件的自动增量,即每次需要新空间时为文件添加的空间量。 文件的 FILEGROWTH 设置不能超过 MAXSIZE 设置。该值可以 MB、KB、GB、TB 或百分比(%)为单位指定。如果未在数量后面指定 MB、KB 或%,则默认值为 MB。 如果指定%,则增量大小为发生增长时文件大小的指定百分比。指定的大小舍入为最 接近的 64KB 的倍数。值为 0 时表明自动增长被设置为关闭,不允许增加空间。如果 未指定 FILEGROWTH,则数据文件的默认值为 1MB,日志文件的默认增长比例为 10%,并且最小值为 64KB。注意:在 SQL Server 2008 中,数据文件的默认增量已 从 10% 改为 1MB。日志文件的默认值仍然为 10%。  FILEGROUP filegroup_name:设置文件组的逻辑名称。filegroup_name 必须在数据库 中唯一,不能是系统提供的名称 PRIMARY 和 PRIMARY_LOG。名称必须符合标识 符规则。文件组定义的语法格式如下: <filegroup>::= {

FILEGROUP filegroup_name [DEFAULT] <filespec>[,...n]

}

其中,DEFAULT 用于指定命名文件组为数据库中的默认文件组。

使用 CREATE DATABASE 命令创建数据库的过程中,SQL Server 用模板数据库(model) 来初始化新建的数据库。在模板数据库中的所有用户定义的对象和数据库的设置都会被复制到 新数据库中。数据库的创建者被默认为该数据库的所有者。

(8)

有参数均取默认值。 实现的步骤如下: (1)打开 SSMS,在窗口上部工具栏的左侧找到“新建查询”按钮,如图 3-6 所示。 (2)单击“新建查询”,在 SSMS 的窗口右侧会建立一个新的查询页面,默认的名称 为“SQLQuery1.sql”,在这个页面中可以输入要让 SQL Server 执行的 T-SQL 语句,如图 3-7 所示。 图 3-6 新建查询的选择窗口 图 3-7 新建的查询窗口 (3)这里输入下面列出的创建数据库的 T-SQL 语句。

CREATE DATABASE STUDENT

(4)单击工具栏中的“执行”按钮,当系统给出的提示信息为“命令已成功完成。”时, 说明此数据库创建成功。

说明:这是最简单的创建数据库的命令。由于没有指定数据库文件和日志文件,默认情 况下,数据库文件的文件名为 STUDENT.mdf,日志文件为 STUDENT_log.ldf,默认存放的磁 盘路径为“C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA”。同时,由于是按 照 model 数据库的方式来创建的数据库,所以数据库文件和日志文件的大小与 model 数据库的 主文件和日志文件的大小相同。由于没有指定数据库文件的最大长度,所以数据库文件可以自 由增长直到填充完整个硬盘空间。 例 3-2 创 建 一 个 名 称 为 STUDENT2 的 数 据 库 , 该 数 据 库 的 主 文 件 逻 辑 名 称 为 STUDENT2_data,物理文件名为 STUDENT2.mdf,初始大小为 3MB,最大尺寸为无限大,增 长速度为 15%;数据库的日志文件逻辑名称为 STUDENT2_log,物理文件名为 STUDENT3.ldf, 初始大小为 2MB,最大尺寸为 50MB,增长速度为 1MB;要求数据库文件和日志文件的物理 文件都存放在 E 盘的 DATA 文件夹下。 实现的步骤如下: (1)在 E 盘创建一个新的文件夹,名称是“DATA”。 (2)在 SSMS 中新建一个查询页面。 (3)输入以下程序段并执行此查询: USE MASTER GO

CREATE DATABASE STUDENT2 ON PRIMARY

(NAME= STUDENT2_data,

(9)

SIZE=3, MAXSIZE=unlimited, FILEGROWTH=15%) LOG ON (NAME= STUDENT2_log, FILENAME='E:\DATA\STUDENT2.ldf', SIZE=2, MAXSIZE=50, FILEGROWTH=1) GO 例 3-3 创建一个指定多个数据文件和日志文件的数据库。该数据库名称为 STUDENTS, 有 1 个 5MB 和 1 个 10MB 的数据文件和 2 个 5MB 的事务日志文件。数据文件逻辑名称为 STUDENTS1 和 STUDENTS2,物理文件名为 STUDENTS1.mdf 和 STUDENTS2.ndf。主文件 是 STUDENTS1,由 PRIMARY 指定,两个数据文件的最大尺寸分别为无限大和 100MB,增 长速度分别为 10%和 1MB。事务日志文件的逻辑名为 STUDENTSLOG1 和 STUDENTSLOG2, 物理文件名为 STUDENTSLOG1.ldf 和 STUDENTSLOG2.ldf,最大尺寸均为 50MB,文件增长 速度为 1MB。要求数据库文件和日志文件的物理文件都存放在 E 盘的 DATA 文件夹下。 程序清单如下: USE MASTER GO

CREATE DATABASE STUDENTS ON PRIMARY (NAME=STUDENTS1, FILENAME='E:\DATA\STUDENTS1.mdf', SIZE=5, MAXSIZE=unlimited, FILEGROWTH=10%), (NAME= STUDENTS2, FILENAME='E:\DATA\STUDENTS2.ndf', SIZE=10, MAXSIZE=100, FILEGROWTH=1) LOG ON (NAME=STUDENTSLOG1, FILENAME='E:\DATA\STUDENTSLOG1.ldf', SIZE=5, MAXSIZE=50, FILEGROWTH=1), (NAME=STUDENTSLOG2, FILENAME='E:\DATA\STUDENTSLOG2.ldf', SIZE=5, MAXSIZE=50, FILEGROWTH=1) GO

(10)

例 3-4 创建了一个数据库 StudentGroup。该数据库包含一个主数据文件 StudentGroup_ PRM.mdf、一个用户定义文件组 StudentGroup_FG1 和一个日志文件 StudentGroup.ldf。主数据 文件在主文件组中,而用户定义文件组包含两个次要数据文件 StudentGroup_FG1_1.ndf 和 StudentGroup_FG1_2.ndf。 程序清单如下: USE MASTER GO

CREATE DATABASE StudentGroup ON PRIMARY ( NAME='StudentGroup_PRIMARY', FILENAME='E:\DATA\StudentGroup_PRM.mdf', SIZE=4MB, MAXSIZE=10MB, FILEGROWTH=1MB), FILEGROUP StudentGroup_FG1 ( NAME='StudentGroup_FG1_DAT1', FILENAME='E:\DATA\StudentGroup_FG1_1.ndf', SIZE=1MB, MAXSIZE=10MB, FILEGROWTH=1MB), ( NAME ='StudentGroup_FG1_DAT2', FILENAME='E:\DATA\StudentGroup_FG1_2.ndf', SIZE=1MB, MAXSIZE=10MB, FILEGROWTH=1MB) LOG ON ( NAME='StudentGroup_LOG', FILENAME='E:\DATA\StudentGroup.ldf', SIZE=1MB, MAXSIZE=10MB, FILEGROWTH=1MB) GO

3.3 修改数据库

3.3.1 打开数据库 1.使用 SSMS 打开数据库 在 SSMS 中打开数据库的步骤是:在“对象资源管理器”窗口中,展开“数据库”节点, 单击选择的数据库,在右面的“对象资源管理器详细信息”窗口中列出当前打开数据库的数据 库对象,如图 3-8 所示。 2.使用 T-SQL 语句打开数据库 在“查询编辑器”中,可以直接通过“可用数据库”下拉列表框 打开并切

(11)

换数据库,如图 3-9 所示,也可以使用 USE 语句打开并切换到当前数据库,其语法格式为: USE database_name 图 3-8 用 SSMS 打开数据库 图 3-9 在查询编辑器中查看数据库信息 例如:打开数据库 AWLT。 具体步骤:在“查询编辑器”窗口中输入 USE AWLT,然后单击工具栏上的“执行”按 钮,在查询编辑器工具栏上的当前数据库列表框中显示 AWLT,如图 3-10 所示。 图 3-10 在查询编辑器中更换数据库

(12)

3.3.2 修改数据库属性 1.使用 SSMS 查看或修改数据库属性 数据库创建以后,可以在 SSMS 中使用数据库的属性设置窗口,查看或更改数据库的某 些属性。其具体步骤如下: (1)在 SSMS 中,右击所要查看或修改的数据库,这里右击“AWLT”数据库,从弹出 的快捷菜单中选择“属性”选项,如图 3-11 所示。 图 3-11 选择数据库属性窗口 (2)在“数据库属性”窗口中,包括常规、文件、文件组、选项、更改跟踪、权限、扩 展属性、镜像和事务日志传送 9 个选择项。选择其中的任何一项,都可以查看与之相关的数据 库信息。如图 3-12 所示,为“选项”功能页中关于数据库选项中的相关信息。 图 3-12 数据库属性窗口

(13)

在“常规”选项页面中,可以看到数据库的名称、状态、所有者、创建日期等信息。 在“文件”选项页面中,可以看到类似于创建数据库时的页面,此时可以像在创建数据 库时那样重新指定数据库文件和事务日志文件的逻辑名称、初始大小、自动增长方式等属性。 在“文件组”选项页面中,可以添加新的文件组或删除“PRIMARY”主文件组以外的其 他文件组。 在“选项”页面中,可以设置数据库的很多属性,例如排序规则、恢复模式、兼容级 别等。 在“权限”选项页面中,可以设置用户对该数据库的使用权限。 在“扩展属性”选项页面中,可以向数据库对象添加自定义属性。使用此页可以查看或 修改所选对象的扩展属性。使用扩展属性,可以添加文本(如描述性或指导性内容)、输入掩 码和格式规则,将它们作为数据库中的对象或数据库自身的属性。由于扩展属性存储在数据库 中,所有读取属性的应用程序都能以相同的方式评估对象。这有助于加强系统中所有程序对数 据的处理方式的一致性。 在“镜像”选项页面中,可以配置并修改数据库的数据库镜像的属性。还可以启动配置 数据库镜像安全向导,以查看镜像会话的状态,并可以暂停或删除数据库镜像会话。 在“事务日志传送”选项页面中,可以配置和修改数据库的日志传送属性。 2.使用 T-SQL 语句修改数据库 使用 T-SQL 语句可以在数据库中添加或删除文件和文件组,也可用于更改文件和文件组 的属性,其语法格式如下:

ALTER DATABASE database_name { <add_or_modify_files> |<add_or_modify_filegroups> }[;] 其中,各参数的说明如下:  database_name:要更改的数据库的名称。  <add_or_modify_files>:指定要添加、删除或修改的文件,其语法格式如下: <add_or_modify_files>::= {

ADD FILE <filespec>[,...n]

[TO FILEGROUP {filegroup_name}] |ADD LOG FILE <filespec>[,...n] |REMOVE FILE logical_file_name |MODIFY FILE <filespec> }

其中,各选项含义如下:

 ADD FILE:向数据库中添加文件。

 TO FILEGROUP {filegroup_name}:指定要将指定文件添加到的文件组中。

 ADD LOG FILE:将要添加的日志文件添加到指定的数据库中。

 REMOVE FILE logical_file_name:从 SQL Server 的实例中删除逻辑文件说明并删除 物理文件。除非文件为空,否则无法删除文件。

(14)

 MODIFY FILE:指定应修改的文件。一次只能更改一个<filespec>属性。必须在 <filespec>中指定 NAME,以标识要修改的文件。如果指定了 SIZE,那么新大小必须 比文件当前大小要大。 若要修改数据文件或日志文件的逻辑名称,在 NAME 子句中指定要重命名的逻辑文件名 称,并在 NEWNAME 子句中指定文件的新逻辑名称。例如: MODIFY FILE(NAME=logical_file_name,NEWNAME=new_logical_name) 若要将数据文件或日志文件移至新位置,在 NAME 子句中指定当前的逻辑文件名称,并 在 FILENAME 子句中指定新路径和操作系统文件名称。例如:

MODIFY FILE (NAME=logical_file_name, FILENAME='new_path/os_file_name')

 add_or_modify_filegroups:向数据库中添加文件组,其语法格式如下:

<add_or_modify_filegroups>::= {

|ADD FILEGROUP filegroup_name |REMOVE FILEGROUP filegroup_name |MODIFY FILEGROUP filegroup_name }

其中,各选项含义如下:

 ADD FILEGROUP filegroup_name:向数据库中添加文件组。

 REMOVE FILEGROUP filegroup_name:从数据库中删除文件组。除非文件组为空, 否则无法将其删除。首先从文件组中删除所有文件。

 MODIFY FILEGROUP filegroup_name {DEFAULT|NAME=new_filegroup_name}:将 文件组设置为数据库的默认文件组或者更改文件组名称来修改文件组。 例 3-5 在 STUDENTS 数据库中添加文件组 Test1FG1,然后将两个 5MB 的文件添加到 该文件组。 程序清单如下: USE MASTER GO

ALTER DATABASE STUDENTS ADD FILEGROUP TEST1FG1 ALTER DATABASE STUDENTS ADD FILE ( NAME=TEST1DAT3, FILENAME ='E:\DATA\T1DAT3.ndf ', SIZE=5MB, MAXSIZE=100MB, FILEGROWTH=5MB), ( NAME=TEST1DAT4, FILENAME='E:\DATA\T1DAT4.ndf', SIZE=5MB, MAXSIZE=100MB, FILEGROWTH=5MB) TO FILEGROUP TEST1FG1 GO 例 3-6 向 STUDENTS 数据库中添加两个 5MB 的日志文件。

(15)

程序清单如下:

USE MASTER GO

ALTER DATABASE STUDENTS ADD LOG FILE

( NAME=TEST1LOG2, FILENAME='E:\DATA\TEST2LOG.ldf', SIZE=5MB, MAXSIZE=100MB, FILEGROWTH=5MB ), ( NAME=TEST1LOG3, FILENAME='E:\DATA\TEST3LOG.ldf', SIZE=5MB, MAXSIZE=100MB, FILEGROWTH=5MB ) GO 3.3.3 数据库更名 除了系统数据库以外,其他的数据库在创建以后都是可以更改名称的。更改数据库的名 称可以采用两种方法,一种方法是直接操作,即在 SSMS 中选中此数据库,右击,在弹出的 快捷菜单中选择“重命名”命令。另一种方法是使用系统存储过程 sp_renamedb 更改数据库的 名称。在重命名数据库之前,应该确保没有用户正在使用该数据库。系统存储过程 sp_renamedb 的语法格式如下: sp_renamedb [@dbname=]'old_name',[@newname=]'new_name' 其中,各参数的说明如下:  [@dbname =]'old_name':指定当前数据库的名称。  [@newname =]'new_name':表示数据库的新名称。 例 3-7 将已存在的数据库 STUDENT2 重命名为 STUDENT_BACK。 实现的步骤如下: (1)在 SSMS 中新建一个查询页面。 (2)输入以下程序段并执行此查询: sp_renamedb 'STUDENT2','STUDENT_BACK' 程序的执行结果如下: 数据库名称'STUDENT_BACK' 已设置。 3.3.4 收缩数据库 1.使用 SSMS 收缩数据库 当为数据库分配的磁盘空间过大时,可以在 SQL Server 2008 中缩小数据库,以节省存储 空间。数据文件和事务日志文件都可以进行收缩。数据库也可设置为按给定的时间间隔自动收

(16)

缩。该活动在后台进行,不影响数据库内的用户活动。 数据库的自动收缩可以在数据库属性中的“选项”选项页面中设置,只要将选项中的“自 动收缩”设为“True”即可,如图 3-13 所示。 图 3-13 设置“自动收缩数据库”对话框 此外,可以在 SSMS 中手动缩小数据库及文件。 (1)使用 SSMS 收缩数据库。在 SSMS 中,右击相应的数据库,这里右击“AWLT”,从 弹出的快捷菜单中依次选择“任务”→“收缩”→“数据库”,如图 3-14 所示。 图 3-14 选择收缩数据库对话框 出现“收缩数据库 - AWLT”对话框,如图 3-15 所示。在“收缩数据库”对话框中,通

(17)

过收缩所有数据库文件来释放未使用的部分空间。可以在此对话框中设置收缩后文件中的最大 可用空间的百分数,即使用“收缩后文件中的最大可用空间”选项来指定收缩后数据库中剩余 的可用空间量。 图 3-15 “收缩数据库-AWLT”对话框 (2)使用 SSMS 收缩文件。在 SSMS 中,右击相应的数据库,这里右击“AWLT”,从弹 出的快捷菜单中依次选择“任务”→“收缩”→“文件”,会弹出“收缩文件-AWLT”对话框, 如图 3-16 所示。 图 3-16 “收缩文件-AWLT”对话框

(18)

收缩文件可以更精确地控制收缩操作,通过收缩单个文件来释放未分配的磁盘空间。在 该对话框中的文件类型下拉列表框中可以选择数据文件或日志文件,然后选择文件名,设置针 对该文件执行收缩操作的方式。 2.使用 T-SQL 语句设置自动收缩数据库 使用 ALTER DATABASE 语句可以将数据库设置为自动收缩。当数据库中有足够的可用 空间时,就会自动发生收缩。其语法格式如下:

ALTER DATABASE database_name SET AUTO_SHRINK on/off

其中:on 将数据库设为自动收缩;off 将数据库设为不自动收缩。 3.使用 T-SQL 语句手动收缩数据库 手动收缩数据库的语法格式为: DBCC SHRINKDATABASE (database_name[,target_percent][,{NOTRUNCATE|TRUNCATEONLY}]) 其中,各参数的说明如下:  database_name:要收缩的数据库名称。  target_percent:数据库收缩后的数据库文件中所要剩余的可用空间百分比。  NOTRUNCATE:释放的文件空间依然保持在数据库文件的范围内。如果未指定,则 释放的文件空间将被操作系统回收利用。  TRUNCATEONLY : 将 数 据 文 件 中 任 何 未 使 用 的 空 间 释 放 给 操 作 系 统 。 使 用 TRUNCATEONLY 时忽略 target_percent。 也可以使用 DBCC 命令来缩小某一个操作系统文件的长度,其语法格式为: DBCC SHRINKFile (FILE_name[,target_SIZE]|[,{EMPTYFILE|NOTRUNCATE|TRUNCATEONLY}]) 其中,各参数的说明如下:  file_name:要收缩的操作系统名称。  target_size:将文件缩小到指定的长度,以 MB 为单位。若缺省该项,文件将尽最大 可能地缩小。  EMPTYFILE:将指定文件上的数据全部迁移到本文件组的其他文件上,以后的操作 将不会在该文件上增加数据。 注意:使用 DBCC SHRINKFile 语句,可以将单个数据库文件收缩到比其他初始创建大小 还要小。必须分别收缩每个文件,而不要试图收缩整个数据库。

3.4 删除数据库

3.4.1 使用 SSMS 删除数据库 对于用户创建的数据库,当不再使用时,可以删除它以释放所占用的磁盘空间。在 SSMS 中,右击所要删除的数据库,从弹出的快捷菜单中选择“删除”选项或直接按下键盘上的 Delete 按钮,系统会弹出“删除对象”对话框。如图 3-17 所示,单击“确定”按钮则会删除该数据 库。注意:删除后不可恢复。

(19)

图 3-17 确认删除数据库对话框

3.4.2 使用 T-SQL 语句删除数据库

使用 T-SQL 中的 DROP 语句可以从 SQL Server 中一次删除一个或多个数据库。其语法格 式如下:

DROP DATABASE database_name[,…n]

例 3-8 删除已创建的数据库 STUDENTS。 实现的步骤如下:

(1)在 SSMS 中新建一个查询页面。 (2)输入以下程序段并执行此查询:

DROP DATABASE STUDENTS

说明:当有别的用户正在使用此数据库时,则不能进行删除操作。

3.5 附加与分离数据库

3.5.1 使用 SSMS 进行数据库的附加与分离 在数据库管理中,根据需要将用户的数据库文件附加到数据库服务器中,由服务器管理, 也可以将用户数据库从数据库服务器中分离出来,而数据库文件仍然保留在磁盘上。 1.使用 SSMS 附加数据库 使用 SSMS 附加数据库的步骤如下: (1)在“对象资源管理器”窗口中,右击“数据库”节点,在弹出的快捷菜单中选择“附 加”命令,如图 3-18 所示。 (2)进入“附加数据库”界面,单击“添加”命令按钮,打开“定位数据库文件”对话 框,选择数据文件所在的路径,选择文件扩展名为“.mdf”的数据文件,单击“确定”按钮, 返回“附加数据库”对话框,如图 3-19 所示。

(20)

图 3-18 选择数据库的附加 图 3-19 “附加数据库”对话框 (3)单击“确定”按钮,完成数据库附加。 2.使用 SSMS 分离数据库 使用 SSMS 分离数据库的步骤如下: (1)在“对象资源管理器”窗口中,展开“数据库”节点,选择要分离的数据库,右击, 在弹出的快捷菜单中选择“任务”→“分离”命令,如图 3-20 所示。 图 3-20 “分离”数据库界面 (2)在“分离数据库”对话框中,显示要分离数据库的几个选项,如图 3-21 所示。  “删除连接”复选框:数据库正在使用时,需要选中该选项来断开与所有的活动的连 接,然后才能分离数据库。  “更信息统计信息”复选框:默认情况下,分离操作将在分离数据库时保留过期的优 化统计信息。若要更新现有的优化统计信息,需要选择此项。

(21)

图 3-21 “分离”数据库界面  “状态”:显示当前数据库状态(“就绪”或“非就绪”两种状态)。  “消息”:若状态为“未就绪”,则“消息”列显示有关数据库的超连接信息。当数据 库涉及复制时,“消息”列显示 Database replicated。数据库有一个或多个活动连接时, “消息”列将显示活动连接个数。 3.5.2 使用 T-SQL 语句分离和附加数据库 1.使用系统存储过程分离数据库 用系统存储过程 sp_detach_db 分离数据库的语法格式如下: sp_detach_db DATABASE_NAME 例 3-9 将数据库“STUDENTS2”从 SQL Server 服务器中分离。 程序清单如下: USE MASTER GO sp_detach_db 'STUDENTS2' GO 2.使用 T-SQL 语句附加数据库 使用 T-SQL 附加数据库的语法格式如下:

CREATE DATABASE database_name ON (FILENAME='os_file_name' ) FOR ATTACH 其中,各参数说明如下:  database_name:数据库名称。  FILENAME:是带路径的主数据库文件名称。  FOR ATTACH:指定通过附加一组现有的操作系统文件来创建数据库。 例 3-10 将数据库 STUDENTS11 附加到 SQL Server 服务器中。 实现的步骤如下: (1)在 SSMS 中新建一个查询页面。 (2)输入以下程序段并执行此查询: USE MASTER GO

CREATE DATABASE STUDENTS11 ON (FILENAME='E:\data\STUDENTS1.mdf') FOR ATTACH

(22)

3.6 应用举例

3.6.1 确定“数据库”

创建“图书管理系统”数据库“DB_Library”。为提高“图书管理系统”对图书的查询性 能,采用多文件组的形式创建“DB_Library”数据库,数据文件分配在 D、E 盘,SQL Server 数据库在查询图书时,可采用多线程同时对数据文件进行读写,提高查询性能。 (1)创建的自定义文件组为:BookGroup1 和 BookGroup2。 (2)主文件组中的数据文件有:BookPri1_Data,BookPri2_Data,对应的操作系统文件分 别为:D:\BookManageSystem\SQLData\BookPriData1.mdf,E:\BMSData\BookPriData2.ndf。 (3)文件组 BookGroup1 中的数据文件有:BookGrp1Fi1_Data,BookGrp1Fi2_Data,对 应的操作系统文件分别为:D:\BookManageSystem\SQLData\BookGrp1Fi1.ndf,E:\BMSData\ BookGr1Fi2.ndf。 (4)文件组 BookGroup2 中的数据文件有:BookGrp2Fi2_Data,BookGrp2Fi2_Data,对 应的操作系统文件分别为:D:\BookManageSystem\SQLData\BookGrp2Fi1.ndf,E:\BMSData\ BookGr2Fi2.ndf。 (5)事务日志分配在 D:\BookManageSystem\SQLData 中。 3.6.2 使用 T-SQL 语句创建“数据库” (1)在 SSMS 下创建“DB_Library”数据库,如图 3-22 所示。 图 3-22 使用 SSMS 创建“DB_Library”数据库 (2)也可以在查询编辑器中通过 T-SQL 语句创建。在查询编辑器中输入创建图书管理数 据库的 T-SQL 语句,程序清单如下: USE master GO

(23)

CREATE DATABASE DB_Library ON PRIMARY ( NAME='BookPri1_Data', FILENAME='D:\BookManageSystem\SQLData\BookPri1Data.mdf', SIZE=5MB, MAXSIZE=50MB, FILEGROWTH=15%), ( NAME='BookPri2_Data', FILENAME='E:\BookManageSystem\SQLData\BookPri2Data.ndf', SIZE=5MB, MAXSIZE=50MB, FILEGROWTH=15%), FILEGROUP BookGroup1 ( NAME='BookGrp1Fi1_Data', FILENAME='D:\BookManageSystem\SQLData\BookGrp1Fi1.ndf', SIZE=5MB, MAXSIZE=50MB, FILEGROWTH=15%), ( NAME='BookGrp1Fi2_Data', FILENAME='E:\BMSData\BookGr1Fi2.ndf', SIZE=5MB, MAXSIZE=50MB, FILEGROWTH=15%), FILEGROUP BookGroup2 ( NAME='BookGrp2Fi1_Data', FILENAME='D:\BookManageSystem\SQLData\BookGrp2Fi1.ndf', SIZE=5MB, MAXSIZE=50MB, FILEGROWTH=5MB), ( NAME='BookGrp2Fi2_Data', FILENAME='E:\BMSData\BookGr2Fi2.ndf', SIZE=5MB, MAXSIZE=50MB, FILEGROWTH=5MB) LOG ON ( NAME='Book_log', FILENAME='D:\BookManageSystem\SQLData\book.ldf', SIZE=5MB, MAXSIZE=50MB, FILEGROWTH=5MB ) GO

本章小结

数据库的存储结构分为逻辑存储结构和物理存储结构两种。

(24)

(1)数据库的逻辑存储结构是指数据库是由哪些逻辑对象组成的。SQL Server 2008 中的 逻辑对象主要包括数据库、数据表、事务日志、视图、文件组、索引、存储过程、函数、触发 器、约束,还有用户、角色、架构等,各种不同的数据库逻辑对象组合在一起,构成了数据库 的逻辑存储结构。 (2)数据库的物理存储结构指的是保存数据库各种逻辑对象的物理文件是如何在磁盘上 存储的,数据库在磁盘上是以文件为单位进行存储的,SQL Server 将数据库映射为一组操作系 统文件。 SQL Server 2008 的数据库文件根据其作用可分为三种类型:主数据文件、辅助数据文件、 事务日志文件。 (1)主数据文件用来存储数据库的数据和数据库的启动信息。 (2)除主数据文件以外的所有其他数据文件都是辅助数据文件。 (3)日志文件包含着用于恢复数据库的所有日志信息。每个数据库必须至少有一个日志 文件,当然也可以有多个。 为了便于分配和管理,SQL Server 允许将多个文件归纳为一组,称为文件组。实现某些数 据布局和管理任务。SQL Server 2008 中的数据库文件组分为主文件组和用户定义文件组。 (1)主文件组包含主要数据库文件和任何没有明确指派给其他文件组的其他文件。数据 库的系统表都包含在主文件组中。

(2)用户定义文件组在 CREATE DATABASE 或 ALTER DATABASE 语句中,使用 FILEGROUP 关键字指定的文件组。

SQL Server 系统数据库有:master 数据库、model 数据库、msdb 数据库、tempdb 数据库、 resource 数据库等。

(1)master 数据库是 SQL Server 的主数据库,记录了 SQL Server 的所有系统级信息。 (2)model 数据库是创建新数据库的模板。 (3)msdb 数据库由 SQL Server 代理用于计划警报和作业,以及记录操作员信息的数 据库。 (4)tempdb 数据库用于保存临时或中间结果集的工作空间。 (5)resource 数据库是只读数据库,它包含了 SQL Server 2008 中的所有系统对象。 在 SQL Server 2008 中创建数据库常用两种方法:使用 SSMS 和 T-SQL 语句。 (1)使用 SSMS 创建数据库,在 SSMS 中通过界面操作完成数据库的创建。 (2)使用 T-SQL 中的 CREATE DATABASE 语句来创建数据库。其语法格式如下:

CREATE DATABASE database_name

[ON [PRIMARY] [<filespec>[,…n][,<filegroupspec>[,…n]]] [LOG ON {<filespec>[,…n]}]

通过 SSMS 或 T-SQL 中的 ALTER DATABASE 语句修改数据库,包括数据文件、日志文 件、属性等。ALTER DATABASE 语法格式如下:

ALTER DATABASE database_name {

<add_or_modify_files> |<add_or_modify_filegroups> }[;]

(25)

击,在弹出的快捷菜单中选择“重命名”命令。另一种方法是使用系统存储过程 sp_renamedb 更改数据库的名称。系统存储过程 sp_renamedb 的语法格式如下: sp_renamedb [@dbname=]'old_name',[@newname=]'new_name' 数据库的自动收缩可以在数据库属性中的“选项”选项页面中设置,将选项中的“自动 收缩”设为“True”。 使用 SSMS 收缩数据库,右击数据库,从弹出的快捷菜单中依次选择“任务”→“收缩” →“数据库”。 使用 SSMS 收缩文件,右击数据库,从弹出的快捷菜单中依次选择“任务”→“收缩” →“文件”。 使用 T-SQL 语言中的 ALTER DATABASE 语句可以将数据库设置为自动收缩。其语法格 式如下:

ALTER DATABASE database_name SET AUTO_SHRINK on/off

使用 T-SQL 语句手动收缩数据库,其语法格式为: DBCC SHRINKDATABASE (database_name[,target_percent][,{NOTRUNCATE|TRUNCATEONLY}]) SSMS 中删除数据库,右击所要删除的数据库,从弹出的快捷菜单中选择“删除”选项或 直接按下键盘上的 Delete 按钮,系统会弹出“删除对象”对话框。数据库删除后不可恢复。 使用 T-SQL 中的 DROP 语句可以从 SQL Server 中一次删除一个或多个数据库。其语法格 式如下:

DROP DATABASE database_name[,…n]

使用 SSMS 附加数据库,在“对象资源管理器”窗口中,右击“数据库”节点,在弹出 的快捷菜单中选择“附加”命令,进入“附加数据库”界面,单击“添加”命令按钮,打开“定 位数据库文件”对话框,选择数据文件所在的路径,选择文件扩展名为“.mdf”的数据文件, 单击“确定”按钮,返回“附加数据库”对话框。单击“确定”按钮,完成数据库附加。 使用 SSMS 分离数据库,在“对象资源管理器”窗口中,展开“数据库”节点,选择要 分离的数据库,右击,在弹出的快捷菜单中选择“任务”→“分离”命令。 使用 T-SQL 中的系统存储过程 sp_detach_db 分离数据库,其语法格式如下: sp_detach_db DATABASE_NAME

习题三

一、填空题 1.使用 CREATE DATABASE 语句创建一个数据库,包括定义________文件和________文件两个部分。 2.使用 CREATE DATABASE 语句创建一个数据库,定义其数据文件以关键字________开始,定义日志 文件以关键字________开始。 3.SQL Server 2008 中的数据库文件组分为________和用户定义文件组。 4.利用 T-SQL 语言删除数据库的关键字是________。 5.SQL Server 2008 维护一组系统级数据库(称为“系统数据库”),分别是________数据库、model 数据 库、msdb 数据库、resource 数据库和________数据库。

(26)

二、选择题 1.下列不属于 SQL Server 2008 的文件是( )。 A..mdf B..ndf C..ldf D..mdb 2.下列( )不是数据库对象。 A.数据模型 B.视图 C.表 D.用户 3.下列数据文件是创建和正常使用一个数据库所必不可少的是( )。 A.事务日志文件 B.安装程序文件 C.主数据文件 D.辅助数据文件 4.下面描述错误的是( )。 A.每个数据文件中有且只有一个主数据文件 B.事务日志文件可以存在于任意文件组中 C.主数据文件默认为 primary 文件组 D.数据库在磁盘上是以文件为单位存储的 5.每次启动 SQL Server 实例时都会重新创建( )数据库。

A.master B.model C.msdb D.tempdb

6.用于保存 SQL Server 2008 系统中的登录账号、系统配置信息以及其他数据库信息的数据库是( )。 A.master B.model C.msdb D.tempdb

三、简答题 1.简述数据库的两种存储结构。 2.数据库由哪几种类型的文件组成?其扩展名分别是什么? 3.简述 SQL Server 2008 中文件组的作用和分类。 四、应用题 1.使用 SSMS 创建名为 teacher 的数据库,并设置数据库主文件名为 teacher_data,大小为 10MB,日志 文件名为 teacher_log,大小为 2MB。 2.删除上题创建的数据库,使用 T-SQL 再次创建该数据库,主文件和日志文件的文件名同上,要求: teacher_data 最大尺寸为无限大,增长速度为 20%,日志文件逻辑名称为 teacher_log,物理文件名为 teacher.ldf, 初始大小为 2MB,最大尺寸为 5MB,增长速度为 1MB。

3.使用两种方法将上面建立的数据库更名为:htteacher。 4.简述如何在 SSMS 中修改数据库的属性。

參考文獻

相關文件

Web 伺服器 Internet information services 6 相關應用工具 SQL Server 2005 Analysis services. SQL server business intelligence development Studio Visual

首先遊戲廠商將 Master Server 啟動。第一台 Local Game Server 啟動後,向 Master Server 登入,Master Server 會告知這台 Local Game Server

上述定理, 即 Dini, Lipschitz, Dirichlet 判别法, 给出函数能展开成 Fourier 级数的充分条件... 下面罗列几个例子,

[r]

微积分的创立是数学发展中的里程碑, 它的发展 和广泛应用开启了向近代数学过渡的新时期, 为研究 变量和函数提供了重要的方法和手段. 运动物体的瞬

笛卡儿企图通过坐标系给几何引进新方 法, 他的成就远远超出他的期望. 坐标系是数 学中的双刃剑, 使得几何的目的可以通过代 数达到, 反过来,

为此, 我们需要建立函 数的差商与函数的导数间的基本关系式, 这些关系式称为“微分学中值定理”...

[初等函数] 幂函数、指数函数、对数函数、三角函数、反三角函数通称为“ 基本初等函