• 沒有找到結果。

数据库技术与应用(第二版) - 万水书苑-出版资源网

N/A
N/A
Protected

Academic year: 2021

Share "数据库技术与应用(第二版) - 万水书苑-出版资源网"

Copied!
42
0
0

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

全文

(1)

第 2 章 SQL Server 数据库的管理与使用

■ 了解:SQL Server 数据库的存储结构;SQL Server 数据库文件的基本类型; 数据库文件和文件组的基本概念。 ■ 理解:数据库文件的组织结构;数据库对象的基本概念;查看、修改、删除 数据库的基本概念;分离数据库和附加数据库的基本概念。 ■ 掌握:数据库文件的创建、分离、附加的方法;备份和恢复数据库的方法。 

2.1  SQL Server 数据库的存储结构 

SQL Server 数据库管理是有关建立、存储、修改和存取数据库中信息的技术,了解它的数 据组织结构和存储方式对使用、 管理和维护数据库十分重要。 数据库的存储结构分为逻辑存储 结构和物理存储结构两种。  2.1.1 逻辑存储结构 数据库的逻辑存储结构指的是数据库是由哪些性质的信息所组成的。它主要应用于面向 用户的数据组织和管理,如数据库的表、视图、存储过程、用户权限等。SQL Server 的数据库 不只是数据的存储,所有与数据处理操作相关的信息都存储在数据库中。  1.SQL Server 数据库对象  SQL Server 提供了很多逻辑组件, 这些逻辑组件通常被称为数据库对象, 也就是具体存储 数据或对数据进行操作的实体。SQL Server 数据库对象中最基本是表和视图,还有存储过程、 用户、角色等(如表  2.1  所示)。它们分别用来存储特定信息并支持特定功能,构成数据库的 逻辑存储结构。 表 2.1  数据库对象及功能 对象名称 功能 表 由数据的行和列组成,格式与工作表类似。行代表一个唯一的记录,列代表记录中的 一个字段。类型定义规定了某个列中可以存放的数据类型 视图 可以限制某个表格可见的行和列,或者将多个表格数据结合起来,作为一个表格显示。 一个视图还可以集中列 存储过程 是一种  Transact­SQL  语句,它们被编译成一个执行计划。该过程用于性能优化和控制 访问 用户 在数据库中,对象的全部权限和所有权由用户帐户控制。用户帐户与数据库相关 角色 指对数据具有相同的访问权限,是数据库一个对象

(2)

续表 对象名称 功能 规则 实现 check 约束从而保证数据的完整性 默认 针对一个表上的一个列的设置,它决定没有被指定为任何值时使用该值 用户定义的数据 类型 是一种自定义的数据类型,它基于某个预先定义的数据类型。它可以用来建立对程序 员更有意义的表结构,有助于确保存放数据的相似的列都具有相同的数据类型 用户定义的函数 是一个由一条或多条  Transact­SQL  语句构成的子例行程序,用于封装代码以便重用。 一个函数可以最多有 1024 个输入参数。用户定义的函数可以取代视图和存储过程  2.SQL Server  数据库类型  SQL Server 数据库分为两种类型,即系统数据库和用户数据库。 (1)系统数据库。 系统数据库是由系统创建和维护的数据库。系统数据库中记录着 SQL Server 2000 的配置 情况、任务情况和用户数据库的情况等系统管理的信息,它实际上就是常说的数据字典。SQL  Server 2000 提供了以下 4 个系统数据库: 

1) Master 数据库。 它是 SQL Server 系统最重要的数据库, 如果该数据库被损坏, SQL Server  将无法正常工作。该数据库记录了 SQL  Server 系统的所有系统信息。这些系统信息包括所有 的登录信息、系统设置信息、SQL Server 的初始化信息和其他系统数据库及用户数据库的相关 信息。 2)Model 数据库。它是所有用户数据库和 Tempdb 数据库的模板数据库,它含有 Master  数据库所有系统表的子集,这些系统数据库是每个用户定义数据库所需要的。  3)Msdb  数据库。它是代理服务数据库,为其警报、任务调度和记录操作员的操作提供 存储空间。  4)Tempdb 数据库。它是一个临时数据库,它的主文件名和日志文件名分别为 Tempdb.dbf  和 Tempdb.ldf。Tempdb 是一个共享的工作空间,SQL Server 2000 中的所有数据库都可以使用 它,它为所有的临时表、临时存储过程及其他临时操作提供存储空间。 (2)用户数据库。 在 SQL Server 中,用户数据库分为系统提供的示例数据库和用户创建的数据库。  1)系统提供的示例数据库。SQL  Server 系统提供 Pubs  示例数据库和 Northwind 示例数 据库。它们分别是以一个图书出版公司为模型,用于演示 SQL Server  数据库中可用的许多选 项。Northwind 示例数据库包含一个名为  Northwind  Traders  的虚构公司的销售数据,该公司 从事世界各地的特产食品进出口贸易。  2)用户创建的数据库。用户创建的数据库是用户根据管理对象的要求创建的数据库,此 数据库中保存着用户直接需要的数据信息。  2.1.2 物理存储结构 数据库的物理存储结构指的是数据库文件在磁盘中是如何存储的。它主要应用于面向计 算机的数据组织和管理,如数据文件、表和视图的数据组织方式,磁盘空间的利用和回收,文 本和图形数据的有效存储等。

(3)

1.数据库文件 数据库文件是存放数据库数据和数据库对象的文件。 SQL Server  中组成数据库的文件有 3  种类型:主数据文件、次数据文件和事务日志文件。 (1)主数据文件(Primary Database File) 。一个数据库可以有一个或多个数据文件,当有 多个数据文件时,有一个文件被定义为主数据文件,扩展名为 MDF,它用来存储数据库的启 动信息和部分或全部数据,一个数据库只能有一个主数据文件。 (2)次数据文件(Secondary Database File) 。次数据文件包含除主数据文件外的所有数据 文件,扩展名为  NDF,用来存储主数据文件中没存储的其他数据。使用次数据文件来存储数 据的优点在于,可以在不同物理磁盘上创建次数据文件,并将数据存储在这些文件中,这样可 以提高数据处理的效率。另外,如果数据库超过了单个  Windows  文件的最大文件大小,可以 使用次数据文件,这样数据库就能继续增长。一个数据库可以有零个或多个次数据文件。 注意: 在 Windows 中, 文件为 FAT 格式时, 单个文件存储容量最大为 4GB; 文件为 NTFS  格式时,单个文件存储容量最大为无限制。 (3)事务日志文件(Transaction Log File) 。事务日志文件是用来记录数据库更新情况的 文件,扩展名为 LDF。如使用 INSERT、UPDATE、DELETE 等对数据库进行操作都会记录在 此文件中,而 SELECT  等对数据库内容不会有影响的操作则不会记录在案。一个数据库可以 有一个或多个事务日志文件。  2.数据库文件的存储形式  SQL Server 数据库文件的存储形式如图 2.1 所示。每个数据库在物理上分为数据文件和事 务日志文件, 这些数据文件和事务日志文件存放在一个或多个磁盘上, 它们不与其他文件共享。 图 2.1  SQL Server 2000 数据库文件的存储形式 (1)数据文件。SQL  Server 将一个数据文件中的空间分配给表格和索引,每块有 64KB  的空间,叫做“扩展盘区” 。一个扩展盘区由 8 个相邻的页(或  64 KB)构成。页是 SQL Server  中数据存储的基本单位,每个页的大小为 8KB,页的单个行中的最大数据量是 8060 个字节, 页的大小决定了数据库表的一行数据的最大大小。 共有 8 种类型的页面: 数据页面、 索引页面、 文本/图像页面、全局分配页面、页面剩余空间页面、索引分配页面、大容量更改映射表页面 和差异更改映射表页面。SQL Server  每次读取或写入数据的最小数据单位是数据页。 (2)事务日志文件。此文件驻留在与数据文件不同的一个或多个物理文件中,包含一系 列事务日志记录而不是扩展盘区分配的页。  3.数据库文件组(Database File Group) 出于分配和管理目的,可以将数据库文件分成不同的文件组。一些系统可以通过控制在

(4)

特定磁盘驱动器上放置的数据和索引来提高自身的性能。每个文件组有一个组名。在  SQL  Server 中有主文件组和用户定义的文件组。 (1)主文件组。每个数据库有一个主文件组,主文件组中包含了所有的系统表。当建立 数据库时, 主文件组包括主数据文件和未指定组的其他文件。 一个文件只能存在于一个文件组 中,一个文件组也只能被一个数据库使用。 (2)用户定义的文件组。用户定义的文件组是指用户首次创建数据库或以后修改数据库 时明确创建的任何文件组。创建这类文件组主要用于将数据文件集合起来,以便于管理、数据 分配和放置。 每个数据库中都有一个文件组作为默认文件组运行。如果在数据库中创建对象时,没有 指定对象所属的文件组,对象将被分配给默认文件组。不管何时,只能将一个文件组指定为默 认文件组。默认文件组中的文件必须足够大,能够容纳未分配给其他文件组的所有新对象。如 果没有指定默认文件组,则主文件组是默认文件组。 注意:事务日志文件不属于任何文件组。文件组中的文件不自动增长,除非文件组中的 文件全都没有可用空间。 

2.2 数据库的创建

数据库的创建可以在企业管理器(Enterprise Manager)中用可视化的图形方式或向导方式 完成,也可以在查询分析器中使用  Transact­SQL  语言完成。只有授予权限的用户可以创建数 据库。 2.2.1 使用企业管理器创建数据库 在企业管理器中使用可视化的图形方式创建数据库的操作步骤如下: (1)启动 SQL Server  服务器,单击“程序”→Microsoft SQL Server→“企业管理器”命 令,如图 2.2  所示,弹出“SQL  Server  Enterprise  Manager” ( 即 SQL  Server 企业管理器)对 话框,在此对话框中展开服务器组,然后展开服务器。

图 2.2  启动企业管理器选项

(2)选中“数据库”文件夹,单击工具栏中的图标 ,也可以在“数据库”文件夹或其 下属任一数据库图标上单击右键,选择“新建数据库”选项,如图 2.3  所示,将打开“数据库 属性”对话框。

(5)

图 2.3  新建数据库选项 (3)在弹出的“数据库属性”对话框的“常规”选项卡中,输入新的数据库名称(数据 库的名称最长为 128 个字符,且不区分大小写)并排序规则名称(此项一般不选,取默认值), 这里输入的数据库名称为  Student_db(本书将以该数据库为基本数据库进行相关操作),如图  2.4  所示。 图 2.4  “常规”选项卡 (4)单击“数据文件”选项卡,对话框形式如图  2.5  所示。用户可在此对话框中进行添 加/删除数据文件,更改数据文件的文件名(逻辑文件名)、位置(物理位置) 、物理文件名或 其他属性的操作。 第一个指定的文件默认为主数据文件, 从第二个开始指定的文件均为次数据 文件。 默认的主数据文件的逻辑文件名是以数据库名作为主数据文件名开头的部分, 然后加上 

_Data,主数据文件的默认存储位置是在 SQL  Server  2000 安装下的 Data 子目录下,默认的物

理文件名为“数据库名_Data.MDF” ,主数据文件默认的初始大小为 1MB。

(5)单击“事务日志”选项卡,对话框形式如图  2.6  所示。用户可在此对话框中对事务 日志文件的名称、存储位置、初始容量大小(默认为  1MB)以及事务日志文件属性进行相关 设置的操作。设置方法同“数据文件”选项卡中的设置方法相同。

(6)

图 2.5  创建数据文件 图 2.6  创建事务日志文件 (6)单击“确定”按钮,系统创建新的数据库。 “数据文件”和“事务日志”选项卡下方的“文件属性”区域是设置数据(或事务日志) 文件增长信息的部分, 首先选择是否允许文件自动增长, 然后设置文件的增长方式和允许的文 件的最大尺寸。

(7)

当选中了“文件自动增长”复选框时,则“文件增长”的方式有以下两种选择: (1)按兆字节。若希望每次文件的增长都是以 MB 为单位自动增长,可选中此单选按钮, 并指定每次增加多少 MB(默认为 1MB)。 (2)按百分比。若希望文件按当前的百分比增长,可选中此单选按钮,并指定每次增加 的百分比(默认为 10%)。 “最大文件大小”有以下两种选择: (1)文件增长不受限制。若允许文件增长没有限制,可选中此单选按钮。系统默认的选 项也是“文件增长不受限制” ,此时文件增长的限制只受磁盘空间的限制。 (2)将文件增长限制为(MB)。若要使文件增长有限制,可选中此单选按钮,并输入一 个上限值,表示当文件增长到此上限时将不再增长。 注意:一个服务器在理论上可以管理 32767 个数据库。  2.2.2 使用向导创建数据库 利用企业管理器提供的创建数据库向导创建数据库的操步骤如下: (1)在企业管理器中,选择要创建数据库的服务器,单击工具栏中的图标 或从“工具” 菜单中选择“向导”选项,如图 2.7 所示,将打开“选择向导”对话框,如图 2.8 所示。 图 2.7  “向导”选项 (2)在图 2.8 中,双击“数据库”选项,选中“创建数据库向导”命令,再单击“确定” 按钮,将弹出“欢迎使用数据库向导”对话框,如图 2.9 所示。 (3)在图 2.9 中单击“下一步”按钮,弹出如图 2.10 所示的对话框。在“数据库名称” 文本框中输入数据库名称,在“数据库文件位置”文本框中输入数据文件存放的位置,也可单 击右边的 按钮选择数据文件存放的位置。在“事务日志文件位置”文本框中输入事务日志 文件存放的位置,也可单击右边的 按钮选择事务日志文件存放的位置。

(8)

图 2.8  “选择向导”对话框

图 2.9  “欢迎使用创建数据库向导”对话框

图 2.10  输入数据库名称和文件位置

(4)在图 2.10 中单击“下一步”按钮,弹出“命名数据库文件” 对话框,如图 2.11 所 示。在此对话框中可以指定数据库所包含的每个数据文件的逻辑名称和初始大小。

(9)

图 2.11  “命名数据库文件”对话框 (5)在图 2.11 中单击“下一步”按钮,弹出“定义数据库文件的增长”对话框,如图 2.12  所示。在此对话框中指定数据文件是否自动增长,若自动增长,则需指定自动增长方式,是按  MB 级增长还是按数据库当前的百分比增长。还可指定增长的最大文件大小是否有限制,若有 限制,则需指定文件增长的最大值。 图 2.12  “定义数据库文件增长”对话框 (6)在图  2.12  中单击“下一步”按钮,弹出“命名事务日志文件”对话框,如图  2.13  所示。在此对话框中可以指定事务日志文件所包含的每个数据文件的逻辑名称和初始大小。 (7)在图 2.13 中单击“下一步”按钮,弹出“定义事务日志文件的增长”对话框,如图  2.14 所示。在此对话框中可以仿照图 2.12 中设置的要求对事务日志文件进行相关操作。 (8)在图 2.14 中单击“下一步”按钮,弹出“正在完成创建数据库向导”对话框,如图  2.15 所示。 (9)若有些项目需要修改,单击“上一步”按钮返回至所要修改处进行相关操作即可, 若不需修改,则单击“完成”按钮,弹出“数据库创建成功”对话框,如图  2.16  所示,此时 完成使用向导创建数据库。

(10)

图 2.13  “命名事务日志文件”对话框

图 2.14  “定义事务日志文件的增长”对话框

图 2.15  “正在完成创建数据库向导”对话框

(11)

2.2.3 使用 Transact­SQL 语言创建数据库 为了让读者能更好地掌握和使用 Transact­SQL 语言,这里对 Transact­SQL  语言的语法进 行约定,如表 2.2 所示。 表 2.2  Transact­SQL 语言的语法约定及使用说明 约定 使用说明 大写  Transact­SQL  关键字 斜体 用户提供的  Transact­SQL  语法的参数 粗体 数据库名、表名、列名、索引名、存储过程、实用工具、数据类型名以及必须按所显示 的原样键入的文本 下划线 指示当语句中省略了包含带下划线的值的子句时应使用的默认值  |(竖线) 分隔括号或大括号中的语法项。只能使用其中一项  [ ](方括号) 可选语法项。不要键入方括号  { }(大括号) 必选语法项。不要键入大括号  [,...n]  指示前面的项可以重复 n 次。各项之间以逗号分隔  [...n]  指示前面的项可以重复 n 次。每一项由空格分隔  [;]  可选的  Transact­SQL  语句终止符。不要键入方括号  <label> ::=  语法块的名称。此约定用于对可在语句中的多个位置使用的过长语法段或语法单元进行 分组和标记。可使用的语法块的每个位置由括在尖括号内的标签指示:<label>  在查询分析器中使用 Transact­SQL 语言创建数据库的命令是 CREATE DATABASE,其语 法格式如下:  CREATE DATABASE database_name  [ ON  [ < filespec > [ ,...n ] ]  [ , < filegroup > [ ,...n ] ]  ]  [ LOG ON { < filespec > [ ,...n ] } ]  [ COLLATE collation_name ]  [ FOR LOAD | FOR ATTACH ]  参数说明: (1)database_name:数据库名称。 (2)ON:关键字表示数据库是根据后面的参数来创建的。 (3)LOG ON:指明事务日志文件的明确定义。如果没有 LOG ON  选项,则系统会自动 产生一个文件名前缀与数据库名相同,大小为数据库中所有数据文件总大小  25%的事务日志 文件。 (4)COLLATE:指明数据库使用的默认排序规则。collation_name  可以是  Windows  的 排序规则名称, 也可以是 SQL  排序规则名称。 如果省略此子句, 则数据库使用当前 SQL Server  设置的排序规则。 (5)FOR LOAD:此选项是为了与 SQL Server 7.0  以前的版本兼容而设定的。读者可以 不用管它。RESTORE  命令可以更好地实现此功能。

(12)

(6)FOR ATTACH:用于附加已经存在的数据库文件到新的数据库中,而不用重新创建 数据库文件。 (7)< filespec >:代表数据文件或日志文件的定义,语法格式如下:  < filespec > ::=  [ PRIMARY ]  ( [ NAME = logical_file_name , ]  FILENAME = 'os_file_name'  [ , SIZE = size ]  [ , MAXSIZE = { max_size | UNLIMITED } ]  [ , FILEGROWTH = growth_increment ] ) [ ,...n ]  1)PRIMARY:指定主文件。主文件组包含所有数据库系统表,还包含所有未指派给用 户文件组的对象。主文件组的第一个文件被认为是主数据文件。如果没有  PRIMARY  项,则 在 CREATE DATABASE  命令中列出的第一个文件将被默认为主文件。  2)NAME = logical_file_name  :为该文件指定逻辑名称。  3)FILENAME = 'os_file_name':为该文件指定在操作系统中存储的路径名和文件名称。  4)SIZE:指定数据库的初始容量大小。  5)MAXSIZE:指定文件的最大容量。如果没有指定 max_size, 则文件可以不断增长直 到充满磁盘。  6)UNLIMITED:指明文件无容量限制。  7)FILEGROWTH = growth_increment:指定文件每次增容时增加的容量大小。 (8)<filegroup>:代表数据库文件组的定义,语法格式如下:  <filegroup> ::=  FILEGROUP filegroup_name < filespec > [ ,...n ]  使用  FILEGROUP  子句将创建的对象指定到定义的文件组,此时该对象的所有页均从指 定的文件组中分配。 【例 2.1】创建一个名称为 Exercise_db1 的简单数据库,文件的所有属性均取默认值。 创建此数据库的语句为:  CREATE DATABASE Exercise_db1  输出结果为:  CREATE DATABASE  进程正在磁盘  'Exercise_db1'  上分配  0.75 MB  的空间。  CREATE DATABASE  进程正在磁盘  'Exercise_db1_log'  上分配  0.49 MB  的空间。 【例  2.2】创建一个指定主数据文件和事务日志文件的简单数据库,数据库名称为  Exercise_db2。要求如下: (1)数据库的主数据文件逻辑文件名为 Exercise_Data,物理文件名为 Exercise.MDF,初 始大小为 1MB,最大文件大小无限制,自动增长量为 10%。 (2)事务日志文件逻辑文件名为 Exercise_LOG,物理文件名为 Exercise.LDF,初始大小 为 1MB,最大文件大小为 10MB,自动增长量为 2MB。 (3)文件存储的物理位置均为 F:\mydb 文件下(设 mydb 文件夹已经建立,下同)。 创建此数据库的语句为:  CREATE DATABASE Exercise_db2  ON  PRIMARY  ( NAME=Exercise_Data,  FILENAME= 'F:\mydb\Exercise.MDF',

(13)

SIZE=1,  MAXSIZE=Unlimited,  FILEGROWTH=10% )  LOG ON  ( NAME=Exercise_LOG,  FILENAME= 'F:\mydb\Exercise.LDF',  SIZE=1,  MAXSIZE=10,  FILEGROWTH=2 )  输出结果为:  CREATE DATABASE  进程正在磁盘  'Exercise_Data'  上分配  1.00 MB  的空间。  CREATE DATABASE  进程正在磁盘  'Exercise_LOG'  上分配  1.00 MB  的空间。 【例  2.3】创建一个指定多个数据文件和事务日志文件的数据库。此数据库名称为  Exercise_db3。要求如下: (1)第一个和第二个数据文件的逻辑文件名分别为 Exercise31  和  Exercise32,物理文件 名分别为 Exe31dat.MDF 和  Exe32dat.NDF,初始大小分别为 10MB 和 15MB,最大文件大小 分别为无限制和 50MB,自动增长量分别为 10%和 1MB。 (2)事务日志文件逻辑文件名分别为 Exercise_LOG31 和 Exercise_LOG32,物理文件名 分别为 Exe31log.LDF 和 Exe32log.LDF,初始大小均为 10MB,最大文件大小均为 10MB,自 动增长量均为 1MB。 (3)文件存储的物理位置均为 F:\mydb 文件下。 创建此数据库的语句为:  CREATE DATABASE Exercise_db3  ON  ( NAME=Exercise31,  FILENAME= 'F:\mydb\Exe31dat.MDF',  SIZE=10,  MAXSIZE=Unlimited,  FILEGROWTH=10% ),  ( NAME=Exercise32,  FILENAME= 'F:\mydb\Exe32dat.NDF',  SIZE=15,  MAXSIZE=50MB,  FILEGROWTH=1 )  LOG ON  ( NAME=Exercise_LOG31,  FILENAME= 'F:\mydb\Exe31log.LDF',  SIZE=10,  MAXSIZE=10,  FILEGROWTH=1 ),  ( NAME=Exercise_LOG32,  FILENAME= 'F:\mydb\Ex3log2.LDF',  SIZE=10,  MAXSIZE=10,  FILEGROWTH=1 )  输出结果为:  CREATE DATABASE  进程正在磁盘  'Exercise31'  上分配  10.00 MB  的空间。  CREATE DATABASE  进程正在磁盘  'Exercise32'  上分配  15.00 MB  的空间。

(14)

CREATE DATABASE  进程正在磁盘  'Exercise_LOG31'  上分配  10.00 MB  的空间。  CREATE DATABASE  进程正在磁盘  'Exercise_LOG32'  上分配  10.00 MB  的空间。 注意:此语句中没有使用关键字 PRIMARY,则第一个文件 Exercise31 成为主数据文件。 【例 2.4】创建具有三个文件组的数据库,此数据库的文件名称为 Exercise_db4。要求如下: (1)主文件组包含两个文件,分别是 Exe4_1_dat 和 Exe4_2_dat,初始大小分别为 10MB  和  15MB,最大文件大小分别为无限制和  50MB,自动增长量分别为  10%和  1MB,文件存储 的物理位置及文件名分别为 C:\mydb\Exe4_F1dat.MDF 和 C:\mydb\Exe4_F2dat.NDF。

(2)文件组  Exe4_Group1  包含文件  E4_G1_F1_dat  和  E4_G1_F2_dat,初始大小均为  10MB,最大文件大小均为无限制,自动增长量分别为  15%和  3MB,文件存储的物理位置及 文件名分别为 D:\mydb\Exe4_G1F1dat.NDF 和 D:\mydb\Exe4_G1F2dat.NDF。 (3)文件组 Exe4_Group2 包含文件 E4_G2_F1_dat 和 E4_G2_F2_dat,初始大小分别为  5MB  和  10MB,最大文件大小均为  40MB,自动增长量均为  10%,文件存储的物理位置及文 件名分别为 E:\mydb\Exe4_G2F1dat.NDF 和 E:\mydb\Exe4_G2F2dat.NDF。 (4)事务日志文件名为 Exe4_LOG,初始大小为 5MB,最大文件大小为 35MB,自动增 长量为 5MB,文件存储的物理位置及文件名为 D:\mydb\Exe4log.LDF。 创建此数据库的语句为:  CREATE DATABASE Exercise_db4  /*  创建主文件组  */  ON PRIMARY  ( NAME=Exe4_1_dat,  FILENAME= 'C:\mydb\Exe4_F1dat.MDF',  SIZE=10,  MAXSIZE=Unlimited,  FILEGROWTH=10% ),  ( NAME=Exe4_2_dat,  FILENAME= 'C:\mydb\Exe4_F2dat.NDF',  SIZE=15,  MAXSIZE=50MB,  FILEGROWTH=1 ),  /*  创建文件组 1 */  FILEGROUP Exe4_Group1  ( NAME=E4_G1_F1_dat,  FILENAME= 'D:\mydb\Exe4_G1F1dat.NDF',  SIZE=10,  MAXSIZE=Unlimited,  FILEGROWTH=15% ),  ( NAME=E4_G1_F2_dat,  FILENAME= 'D:\mydb\Exe4_G1F2dat.NDF',  SIZE=10,  MAXSIZE=Unlimited,  FILEGROWTH=3 ),  /*  创建文件组 2 */  FILEGROUP Exe4_Group2  ( NAME=E4_G2_F1_dat,  FILENAME= 'E:\mydb\Exe4_G2F1dat.NDF',  SIZE=5,  MAXSIZE=40,  FILEGROWTH=10% ),

(15)

( NAME=E4_G2_F2_dat,  FILENAME= 'E:\mydb\Exe4_G2F2dat.NDF',  SIZE=10,  MAXSIZE=40,  FILEGROWTH=10% )  /*  创建事务日志文件  */  LOG ON  ( NAME=Exe4_LOG,  FILENAME= 'D:\mydb\Exe4log.LDF',  SIZE=5,  MAXSIZE=35,  FILEGROWTH=5 )  输出结果为:  CREATE DATABASE  进程正在磁盘  'Exe4_1_dat'  上分配  10.00 MB  的空间。  CREATE DATABASE  进程正在磁盘  'Exe4_2_dat'  上分配  15.00 MB  的空间。  CREATE DATABASE  进程正在磁盘  'E4_G1_F1_dat'  上分配  10.00 MB  的空间。  CREATE DATABASE  进程正在磁盘  'E4_G1_F2_dat'  上分配  10.00 MB  的空间。  CREATE DATABASE  进程正在磁盘  'E4_G2_F1_dat'  上分配  5.00 MB  的空间。  CREATE DATABASE  进程正在磁盘  'E4_G2_F2_dat'  上分配  10.00 MB  的空间。  CREATE DATABASE  进程正在磁盘  'Exe4_LOG'  上分配  5.00 MB  的空间。 

2.3 数据库的修改

创建数据库之后,可以使用企业管理器或在查询分析器中使用  Transact­SQL  语言对数据 库的原始定义进行修改。通常进行的修改操作有:修改数据库名称或所有者、修改数据库存放 的位置、修改数据库的容量等。  2.3.1 使用企业管理器修改数据库 使用企业管理器查看或修改数据库的相关设置的操作步骤如下: (1)在企业管理器中,选择要修改的数据库,单击右键,在弹出的快捷菜单中单击“属 性”命令,如图 2.17 所示。 图 2.17  数据库“属性”选项

(16)

(2)此时将弹出数据库“属性”对话框,如图 2.18 所示。选择“常规”选项卡,可以查 看选定数据库的名称、状态、所有者、创建日期和时间、大小(以兆字节(MB)为单位) 、 可用空间、用户数、上次数据库和事务日志备份的日期和时间、有关维护计划的详细信息、数 据库排序规则类型。 图 2.18  数据库“属性”对话框(“常规”选项卡) (3)选择“数据文件”选项卡,如图 2.19 所示,可以指定选定数据文件的文件名、位置、 分配的空间和文件组, 还可以修改数据文件自动增长的方式和最大文件大小。 但不能修改数据 文件的逻辑文件名和物理文件名。 图 2.19  数据库“属性”对话框(“数据文件”选项卡)

(17)

(4)选择“事务日志”选项卡,如图 2.20 所示,可以查看事务日志文件的文件名、位置 和分配的空间, 还可以指定事务日志文件的自动增长方式和最大文件大小。 但不能修改事务日 志文件的逻辑文件名和物理文件名。 图 2.20  数据库“属性”对话框(“事务日志”选项卡) (5)选择“文件组”选项卡,如图 2.21 所示,可以查看或指定文件组的名称、文件数和 文件组的状态。 图 2.21  数据库“属性”对话框(“文件组”选项卡) (6)选择“选项”选项卡,如图 2.22 所示,可以设置用户访问数据库的方式,指定数据

(18)

库的还原模型类型,还可以更改数据库的配置设置。 图 2.22  数据库“属性”对话框(“选项”选项卡) (7)选择“权限”选项卡,如图 2.23 所示,可以查看用户或角色的名称,还可以指定是 否授权给每个用户或角色创建表、创建视图、创建系统过程、创建默认值、创建规则、创建函 数、创建备份数据库和创建备份日志的权限。 图 2.23  数据库“属性”对话框(“权限”选项卡) 注意:在企业管理器中,不能更改数据库的名称。

(19)

2.3.2 使用 Transact­SQL 语言修改数据库 在查询分析器中使用 Transact­SQL 语言的 ALTER  DATABASE 命令,可以在数据库中添 加或删除文件和文件组,也可以更改文件和文件组的属性(如更改数据库的存放位置和容量、 数据库名称、文件组名称以及数据文件和日志文件的逻辑名称) 。此命令的语法格式如下:  ALTER DATABASE database  { ADD FILE < filespec > [ ,...n ] [ TO FILEGROUP filegroup_name ]  | ADD LOG FILE < filespec > [ ,...n ]  | REMOVE FILE logical_file_name  | ADD FILEGROUP filegroup_name  | REMOVE FILEGROUP filegroup_name  | MODIFY FILE < filespec >  | MODIFY NAME = new_dbname  | MODIFY FILEGROUP filegroup_name {filegroup_property | NAME = new_filegroup_name }  | SET < optionspec > [ ,...n ] [ WITH < termination > ]  | COLLATE < collation_name >  }  参数说明: (1)database:要更改的数据库的名称。 (2)ADD FILE:指定要添加的文件。 (3)TO FILEGROUP:指定要将文件添加到的文件组。 (4)ADD LOG FILE:指定要将日志文件添加到的数据库。 (5)REMOVE FILE:从系统中删除文件描述和物理文件。 (6)ADD FILEGROUP:指定要添加的文件组。 (7)REMOVE FILEGROUP:从系统中删除文件组。 (8)MODIFY FILE:指定要更改给定的文件及文件属性。 (9)MODIFY NAME = new_dbname:重命名数据库。 (10) MODIFY FILEGROUP filegroup_name { filegroup_property | NAME = new_filegroup_  name }:指定要修改的文件组和所需的改动。 (11)filespec:表示文件说明,它包含像逻辑文件名和物理文件名这样的进一步选择项。 【例 2.5】向数据库中添加文件。要求如下: (1)在 Exercise_db1 数据库中添加一个新数据文件,数据文件的逻辑文件名、物理位置 及文件名分别为 Exe1dat1 和 D:\mydb\Exe1_dat1.NDF。 (2)数据文件的初始大小为 2MB,最大文件大小为 30MB,自动增长量为 2MB。 完成操作的语句如下:  ALTER DATABASE Exercise_db1  ADD FILE  (  NAME=Exe1dat1,  FILENAME='D:\mydb\Exe1_dat1.NDF',  SIZE=2MB,  MAXSIZE=30MB,  FILEGROWTH=2MB  )  输出结果如下:

(20)

以 2.00 MB 为单位在磁盘 Exe1dat1 上扩展数据库。 【例 2.6】向数据库中添加由两个文件组成的文件组。要求如下: (1)在 Exercise_db1 数据库中添加 Exe1FG1 文件组。 (2)将文件 Exe1dat2 和 Exe1dat3  添加至 Exe1FG1 文件组,文件 Exe1dat2 和 Exe1dat3  的物理位置及文件名分别为 D:\mydb\Exe1_dat2.ndf 和 D:\mydb\Exe1_dat3.ndf。 (3)两个数据文件的初始大小均为 2MB,最大文件大小均为 30MB,自动增长量均为 2MB。 (4)将  Exe1FG1  设置为默认文件组。 完成操作的语句如下:  /*  向  Exercise_db1 数据库添加文件组  */  ALTER DATABASE Exercise_db1  ADD FILEGROUP Exe1FG1  GO  /*  将文件 Exe1dat2 和 Exe1dat3  添加至文件组  */  ALTER DATABASE    Exercise_db1  ADD FILE  ( NAME=Exe1dat2,  FILENAME='D:\mydb\Exe1_dat2.ndf',  SIZE=2MB,  MAXSIZE=30MB,  FILEGROWTH=2MB),  ( NAME=Exe1dat3,  FILENAME='D:\mydb\Exe1_dat3.ndf',  SIZE=2MB,  MAXSIZE=30MB,  FILEGROWTH=2MB)  TO FILEGROUP Exe1FG1  GO  /*  将  Exe1FG1  设置为默认文件组  */  ALTER DATABASE Exercise_db1  MODIFY FILEGROUP Exe1FG1 DEFAULT  GO  输出结果如下: 以  2.00 MB  为单位在磁盘  'Exe1dat2'  上扩展数据库。 以  2.00 MB  为单位在磁盘  'Exe1dat3'  上扩展数据库。 文件组 属性  'DEFAULT'  已设置。 注意:以上语句块中 GO 不是 Transact­SQL 语言中的一个语句(即不能被 Transact­SQL  语言识别),而是可为 osql 和 isql 实用工具及 SQL  Server 查询分析器识别的命令。它用来通 知执行 GO 之前的一个或多个 SQL 语句。GO 命令和 Transact­SQL 语句不可在同一行。

【例 2.7】向数据库中添加两个日志文件。要求如下: (1)在 Exercise_db1 数据库中添加两个日志文件 Exe1log2 和  Exe1log3,它们的物理位 置及文件名分别为 D:\mydb\Exe1_log2.ldf 和  D:\mydb\Exe1_log3.ldf。 (2)两个日志文件的初始大小均为 2MB,最大文件大小均为 30MB,自动增长量均为 2MB。 完成操作的语句如下:  ALTER DATABASE Exercise_db1  ADD LOG FILE  ( NAME=Exe1log2,

(21)

FILENAME='D:\mydb\Exe1_log2.ldf',  SIZE=2MB,  MAXSIZE=30MB,  FILEGROWTH=2MB),  ( NAME=Exe1log3,  FILENAME='D:\mydb\Exe1_log3.ldf',  SIZE=2MB,  MAXSIZE=30MB,  FILEGROWTH=2MB)  GO  输出结果如下: 以  2.00 MB  为单位在磁盘  'Exe1log2'  上扩展数据库。 以  2.00 MB  为单位在磁盘  'Exe1log3'  上扩展数据库。 【例  2.8】修改现有文件的容量。要求是:将例  2.6  中添加到数据库  Exercise_db1  中的  Exe1dat2 文件增加容量至 10MB。 完成操作的语句如下:  ALTER DATABASE Exercise_db1  MODIFY FILE  (NAME = Exe1dat2,  SIZE = 10MB)  输出结果如下: 命令已成功完成。 注意:在对现有文件进行容量修改时,指定容量的大小必须大于当前容量的大小。 【例 2.9】修改数据库文件名称。要求是:将数据库 Exercise_db1 名称修改为 Exe_db1。 完成操作的语句如下:  ALTER DATABASE Exercise_db1  MODIFY NAME=Exe_db1  输出结果如下: 数据库 名称  'Exe_db1'  已设置。 注意:在对数据库的名称进行修改前,应保证没有人使用该数据库,同时将要修改名称 的数据库的访问选项设为单用户模式(single user mode)并关闭数据库。修改数据库名称后, 在企业管理器中所看到的仍然是原来的数据库名称,只有进行了“刷新”操作或在 SQL Server  重新启动后才会看到修改后的数据库名称。另外,对数据库文件名称进行修改时,必须遵循标 识符的规则。 

2.4 数据库的删除

不需要的数据库可以删除,这样可以释放在磁盘上所占用的空间。删除数据库有多种方 法,既可使用快捷菜单方式,也可使用 Transact­SQL 语言完成操作。  2.4.1 使用快捷菜单删除数据库 使用快捷菜单方式删除数据库可以在企业管理器中完成,也可以在查询分析器中完成。  1.在企业管理器中删除数据库 在企业管理器中选择要删除的数据库,单击右键,从弹出的菜单中选择“删除”命令,

(22)

如图 2.24 所示。在弹出的“删除数据库”确认对话框(如图 2.25 所示)中选中“为数据库删 除备份并还原历史记录”复选项,单击“是”按钮即可删除数据库。 图 2.24  企业管理器中删除数据库选项 图 2.25  “删除数据库”确认对话框 在企业管理器中,还可以单击要删除的数据库,从工具栏中选择 图标来删除该数据库。 系统会提示确认是否要删除数据库。  2.在查询分析器中删除数据库 在查询分析器中选择要删除的数据库并右击,从弹出的菜单中单击“删除”命令,如图  2.26 所示。在弹出的“SQL  查询分析器”确认对话框(如图 2.27 所示)中,单击“确定”按 钮即可删除数据库。 图 2.26  查询分析器中删除数据库选项

(23)

图 2.27  “SQL  查询分析器”确认对话框 删除数据库一定要慎重,因为删除数据库将删除数据库所使用的数据库文件和磁盘文件。 注意:当数据库正在使用、正在被还原或包含用于复制的已经出版的对象时,数据库不 能删除。SQL Server  的系统数据库也不能删除。  2.4.2 使用 Transact­SQL 语言删除数据库 在查询分析器中使用 Transact­SQL 语言的 DROP DATABASE  命令, 可以一次删除一个或 几个数据库。此命令的语法格式如下:  DROP DATABASE database_name [ ,...n ]  参数说明:  database_name:指定要删除的数据库名称。 【例  2.10】删除  Test_db1  单个数据库(设已经创建好的数据库  Test_db1、Test_db2  和  Test_db3 不需要了) 。 完成操作的语句如下:  DROP DATABASE Test_db1  输出结果如下: 正在删除数据库文件  'C:\Program Files\Microsoft SQL Server\MSSQL\data\Test_db1_Log.LDF'。 正在删除数据库文件  'C:\Program Files\Microsoft SQL Server\MSSQL\data\Test_db1_Data.MDF'。 【例 2.11】 删除 Test_db2 和 Test_db3 多个数据库。 完成操作的语句如下:  DROP DATABASE Test_db2,Test_db3  输出结果如下: 正在删除数据库文件  'C:\Program Files\Microsoft SQL Server\MSSQL\data\Test_db2_Log.LDF'。 正在删除数据库文件  'C:\Program Files\Microsoft SQL Server\MSSQL\data\Test_db2_Data.MDF'。 正在删除数据库文件  'C:\Program Files\Microsoft SQL Server\MSSQL\data\Test_db3_Log.LDF'。 正在删除数据库文件  'C:\Program Files\Microsoft SQL Server\MSSQL\data\Test_db3_Data.MDF'。 

2.5 数据库的分离和附加 

SQL  Server  允许分离数据库的数据文件和事务日志文件,然后将其重新附加到同一台或 另一台服务器上。  2.5.1 数据库的分离 分离数据库就是将数据库从 SQL  Server 中删除,但是保持组成该数据的数据文件和事务 日志文件中的数据完好无损。在实际工作中,分离数据库作为对数据库的一种备份来使用。 分离数据库的操作步骤如下: (1)在企业管理器中选择要分离的数据库,单击鼠标右键,选择“所有任务”→“分离

(24)

数据库”命令,如图 2.28 所示。 图 2.28  分离数据库选项 (2)弹出“分离数据库”对话框,如图 2.29 所示。在此对话框中检查数据库的状态。 图 2.29  “分离数据库”对话框 (3)然后单击“确定”按钮,弹出“分离数据库顺利完成”对话框,如图 2.30 所示,该 数据库就被分离。 图 2.30  “分离数据库顺利完成”对话框 在进行数据库分离时,必须注意以下事项: (1)在图 2.29  的“数据库状态”栏中,“使用本数据库的连接”数应为 0,该数据库才 能分离。若存在连接,应清除与选定数据库的任何连接。 (2)正在复制数据库时不能分离数据库。 (3)SQL Server 中的 Master、Model 和 Tempdb 这三个系统数据库不能进行分离操作。

(25)

2.5.2 数据库的附加 附加数据库的工作是分离数据库的逆操作, 通过附加数据库, 可以将没有加入 SQL Server  服务器的数据库文件添加到服务器中。还可以很方便地在 SQL Server  服务器之间利用分离后 的数据文件和事务日志文件组成新的数据库。 附加数据库的操作如下: (1)首先复制或移动数据库文件。先将与数据库关联的.MDF(主数据文件)和.LDF(事 务日志文件)这两个文件复制到目标服务器上,或是同一服务器的不同文件夹下。这两个文件 一般位于默认的 C:\Program Files\Microsoft SQL Server\MSSQL\Data 目录下。 (2)在企业管理器中右击“数据库”选项,单击“所有任务”→“附加数据库”命令, 弹出“附加数据库”对话框,如图 2.31 所示。 图 2.31  “附加数据库”对话框 (3)在图 2.31 中的“要附加数据库的 MDF 文件”文本框内输入要附加的数据库的 MDF  名称。如果不能确定文件位于何处,单击 按钮进行搜索。若要确保指定的  MDF  文件正确, 则单击“验证”按钮。在“附加为”文本框内输入数据库的名称。数据库名称不能与任何现有 数据库名称相同。在“指定数据库所有者”文本框内输入数据库的所有者名称。 (4)单击“确定”按钮,弹出“附加数据库顺利完成”对话框,如图 2.32 所示。新附加 的数据库的数据库节点即创建在“数据库”文件夹中。 图 2.32  “附加数据库顺利完成”对话框 注意:在附加数据库时,当确定主数据文件的名称和物理位置后,与它相配套的事务日 志文件(.LDF)也一并加入。若在图 2.31 的“附加数据库”对话框中的“当前文件位置”出 现 符号,如图 2.33 所示,则说明该文件的位置已经改变,还必须指出该文件改变的正确位 置。否则,SQL  Server  将试图基于存储在主文件中的不正确的文件位置信息附加文件,且不 能成功附加数据库。

(26)

图 2.33  已经改变位置的文件信息 

2.6 数据备份和还原

数据的安全性和可用性都离不开良好的数据备份工作。为防止非法登录者或非授权用户 对 SQL Server  数据库及数据造成破坏、合法用户不小心对数据库的数据做了不正确的操作、 保存数据库文件的磁盘遭到损坏(如计算机硬件故障、计算机病毒袭击、自然灾害等) 、运行  SQL  Server  的服务器因某种不可预见的事情而导致崩溃,有必要对数据进行备份和还原。本 节主要介绍备份和还原的含义,备份的种类、备份设备及备份策略等基本概念,以及创建备份 和还原数据库的基本操作。  2.6.1 数据备份  1.备份概述 备份是指定期或不定期地将  SQL  Server  数据库中的全部或部分数据复制到安全的存储 介质(磁盘、磁带等)上保存起来的过程。数据库备份记录了在进行备份这一操作时数据库 中所有数据的状态,如果数据库因意外而损坏,这些备份文件将在数据库还原时被用来还原 数据库。  SQL Server 备份数据库是动态的, 即在数据库联机或正在使用时可以执行备份操作。 但是, 在数据库备份操作中不允许进行下列操作: (1)创建或删除数据库文件。 (2)在数据库(自动或手工)或数据库文件上执行收缩操作时截断文件。如果备份正在 运行,则此操作将失败。可以在备份完成后执行截断操作。 如果在上述某个操作正在进行时开始备份,则备份将等待该操作完成,直到会话超过所 设置的时间限制。如果在备份操作执行过程中试图执行上面任一操作,该操作将失败,而备份 操作继续进行。 另外,进行备份操作是有权限限制的,即固定服务器角色  sysadmin  和固定数据库角色  db_owner、db_backupoperator 可以做备份操作,或者通过授权其他角色也允许做数据库备份。  2.备份类型  SQL Server 2000 提供了四种不同的类型进行数据备份:数据库备份(Database Backups)、 差异备份(Differential Database Backups)、事务日志备份(Transaction  Log Backup)、文件和 文件组备份(File and File Group Backup)。 (1)数据库备份(完全备份) 。数据库备份执行的是完整数据库备份,即备份整个数据 库,包括用户表、系统表、索引、视图、存储过程等所有的数据和数据库对象。完全备份速度 慢,占用磁盘空间大。 (2)差异备份。差异备份是完全备份的补充,执行的是差异数据库备份。差异备份仅记 录自上次完整数据库备份后对数据库数据所做的更改。 通常情况下, 差异备份需要的时间比完

(27)

全备份短,占用的磁盘空间小。 (3)事务日志备份。事务日志是作为数据库中的单独文件或一组文件实现的,用于记 录所有事务对数据库所做的修改。事务日志备份是自上次备份事务日志后对数据库执行的对 所有事务的一系列记录。可以使用事务日志备份将数据库还原到特定的即时点(如输入多余 数据前的那一点)或还原到故障点。与差异备份类似,事务日志备份的备份文件和时间都会 比较短。 注意:在创建第一个事务日志备份之前,必须先创建完全备份(如数据库备份或一组文 件备份中的第一个备份)。 (4) 文件或文件组备份。 如果在创建数据库时为数据库创建了多个数据库文件或文件组, 并且数据库比较庞大, 使用此备份方式比较好。 使用文件和文件组备份方式每次只备份一个或 几个文件或文件组,可以分多次来备份数据库,避免大型数据库备份时间长的问题。另外,由 于文件和文件组备份只备份其中一个或多个数据文件, 那么当数据库里的某个或某些文件损坏 时,可以只还原损坏的文件或文件组备份,这样可以提高数据库还原的速度。  3.备份设备 在 SQL  Server 中进行备份时,必须先创建存放备份数据的备份设备,备份设备可以是磁 盘或磁带。SQL Server 将数据库、事务日志和文件备份到磁盘或磁带设备上。如果是备份到磁 盘中,可以有两种形式:一种是文件的形式;另一种是备份设备的形式。无论是哪种形式,在 磁盘中的体现都是文件的形式。 在备份操作过程中,将要备份的数据(即备份数据)写入物理备份设备。物理备份设备 是指操作系统提供的磁盘文件或磁带机。可以将备份数据写入  1  到  64  个备份设备。如果备 份数据需要多个备份设备,则所有设备必须对应于一种设备类型(磁盘或磁带)。 将媒体集中的第一个备份数据写入物理备份设备时,便会初始化此备份设备。包含一个 或多个备份设备的集合的备份构成一个媒体集。 媒体集是备份媒体 (磁盘或磁带) 的有序集合, 它使用固定类型和数量的备份设备。  4.备份策略 备份策略是指确定需备份的内容、备份的时间及备份的方式型。其中最重要的问题之一 就是如何选择和组合备份方式。因为单纯地采用任何一种备份方式都存在一些缺陷。完全备 份执行得过于频繁会消耗大量的备份介质,而执行得不够频繁又会无法保证数据备份的质 量。单独使用差异备份和事务日志备份在数据还原时都存在风险,这样会降低数据备份的安 全性。通常的备份策略是组合这几种方式形成适度的备份方案,以弥补单独使用任何一种方 式时的缺陷。 常见的组合备份方式有:完全备份、完全备份加日志备份、完全备份加差异备份再加事 务日志备份。 (1)完全备份。该备份忽略两次备份操作之间数据的变化情况,是一种每次都对备份 目标执行完全备份的方式。此策略适合于数据库的数据不是很大,而且数据更改不是很频繁 的情况。 (2)完全备份加事务日志备份。创建定期的数据库完全备份,并在两次数据库完全备 份之间按一定的时间间隔创建事务日志备份,增加事务日志备份的次数(如每隔几小时备份 一次)以减少备份时间。此策略适合于不希望经常创建完全备份,但又不允许丢失太多数据 的情况。

(28)

(3)完全备份加差异备份再加事务日志备份。创建定期的数据库完全备份,并在两次数 据库完全备份之间按一定的时间间隔(如每隔一天)创建差异备份,在完全备份之间安排差异 备份可减少数据还原后需要还原的日志备份数, 从而缩短还原时间。 再在两次差异备份之间创 建一些日志备份。此策略的优点是备份和还原的速度比较快,并且当系统出现故障时,丢失的 数据也比较少。  2.6.2 数据还原  1.还原概述 数据还原是数据备份的逆向操作。还原数据库是一个装载数据库的备份,然后应用事务 日志重建的过程。 当数据库或数据遭受破坏或丢失, 或者因维护任务或数据的远程处理从一个 服务器向另一个服务器拷贝数据库时, 需要执行还原数据库的操作。 执行还原操作可以重新创 建在备份数据库完成时, 数据库中存在的相关文件, 但备份后对数据库的所有修改将不能被还 原而丢失。  2.还原模型  SQL Server 提供了三种还原模型用以简化还原计划、 简化备份和还原过程以及阐明系统操 作要求之间的权衡。这三种还原模型是:简单(Simple)还原模型、完全(Full)还原模型和 大容量日志(Bulk_logged)还原模型。这些模型之间的关系和它们的特点如表 2.3 所示。 表 2.3  SQL Server 三种还原模型的特点 还原模式 说明 工作丢失的风险 还原到的时间点 简单 无日志备份 最新备份之后的更改不受保护。在发生灾难 时,这些更改必须重做 只能还原到备份的结尾 完全 需要日志备份 正常情况下没有。如果日志尾部损坏,则必 须重做自最新日志备份之后所做的更改 如果备份在接近特定的时 间点完成,则可以还原到 该时间点 大容量日志 需要日志备份。 是 完 全 还 原 模 式的附加模式 如果在最新日志备份后发生日志损坏或执行 大容量日志记录操作,则必须重做自上次备 份之后所做的更改。否则不丢失任何工作 可以还原到任何备份的结 尾。不支持时间点还原 (1)简单还原模型。该模型在进行数据库还原时仅使用了数据库备份或差异备份,而不 涉及事务日志备份。它使数据只能还原到备份结束时的数据库。这种模型最容易实施,它所占 用的存储空间也最小。 (2)完全还原模型。该模型通过使用数据库备份和事务日志备份将数据库恢复到发生失 败的时刻,它几乎不造成任何数据丢失,为数据提供了最大的保护性和灵活性。为保证这种还 原程度,包括大容量操作(如创建索引、大容量复制和大容量装载数据)在内的所有操作都将 完整地记入事务日志。选择完全还原模型时,常使用的备份策略是:先进行完全数据库备份; 然后进行差异数据库备份;最后进行事务日志的备份。 (3)大容量日志还原模型。该模型在性能上要优于简单还原模型和完全还原模型,它能 尽最大努力减少大规模操作所需要的存储空间。这些大规模操作主要是创建索引或大容量复 制。选择大容量日志还原模型所采用的备份策略与完全还原所采用的还原策略基本相同。

(29)

3.还原顺序  SQL Server 中的还原方案使用一个或多个还原步骤(操作)来实现,称为“还原顺序” 。 还原的顺序与选择的备份类型和方式有关。在简单情况下,还原操作只需要一个完整数据库 备份、一个差异数据库备份和后续日志备份。在这些情况下,很容易构造一个正确的还原顺 序。例如,若要将整个数据库还原到故障点,先备份事务日志(日志的“尾部” ) ,然后按备 份的创建顺序还原最新的完全数据库备份、最新的差异备份(如果有)以及所有后续事务日 志备份。 在稍复杂的情况下,构造一个正确的还原顺序可能是个复杂的过程。这里就不作介绍了。  2.6.3 数据备份和还原操作  1.数据备份的基本操作 数据备份的基本操作顺序是:①先选择备份类型;②创建备份设备;③实现备份。 (1)选择备份类型。  SQL Server 支持单独使用一种备份类型或组合使用多种备份类型。 选择备份类型应该结合 还原模型一起考虑,这样更利于对数据的还原。备份类型和还原模型的关系如表 2.4  所示。 表 2.4  备份类型和还原模型的关系 模型 备份类型 数据库 数据库差异 事务日志 文件或文件差异 简单 必需 可选 不允许 不允许 完全 必需(或文件备份) 可选 必需 可选 大容量日志记录 必需(或文件备份) 可选 必需 可选 根据备份类型选择还原模型的操作是:在企业管理器中选中要进行备份的数据库,单击 右键,在弹出的快捷菜单中单击“属性”命令,打开数据库“属性”对话框,在数据库“属性” 对话框中选择“选项”选项卡,在“模型”文本框中指定还原模型来决定总体备份策略和使用 的备份类型。如图 2.34 所示。 图 2.34  指定还原模型对话框 (2)创建备份设备。 在 SQL  Server 中可以使用企业管理器创建备份设备。使用企业管理器创建备份设备,既 可以在企业管理器中的“管理”文件夹的“备份”中先创建备份设备,也可以在实现备份操作 时直接创建新备份设备。这里介绍前一种方法,后一种方法在例 2.12 中介绍。 使用企业管理器创建备份设备的操作步骤如下:  1)在企业管理器中选择想要创建备份设备的服务器,右击“管理”文件夹下的“备份”

(30)

文件,在弹出的快捷菜单中单击“新建备份设备”命令,如图 2.35  所示。 图 2.35  “新建备份设备”选项  2)在弹出的“备份设备属性—新设备”对话框(如图  2.36  所示)的“名称”文本框中 指定备份设备的名称。若将数据库备份到磁盘上,在“文件名”文本框中指定磁盘驱动器的名 称和路径,也可以单击文本框右边的 按钮修改备份设备文件的存储位置和备份文件名。若 将数据库备份到磁带上,必须将磁带设备物理连接到运行  SQL Server  实例的计算机上。 图 2.36  “备份设备属性—新设备”对话框  3)单击“确定”按钮,系统创建备份设备。 此时就可在选中的“备份”节点右边的内容窗格中看到所创建的新设备和原来创建好的 全部设备。若要删除已经创建好的备份设备,只要右击要删除的设备,选择“删除”命令,在 弹出的确认对话框中单击“是”按钮即可删除。 (3)实现备份。 实现数据库的备份可以使用企业管理器,也可以使用向导,还可以使用  Transact­SQL  语 言的 BACKUP  命令完成。这里只介绍使用企业管理器实现备份的操作,其操作步骤如下:  1)在企业管理器中右击要进行备份的数据库,单击“所有任务”→“备份数据库”命令, 如图 2.37 所示。 图 2.37  “备份数据库”选项

(31)

2)在“SQL  Server  备份”对话框(如图 2.38  所示)的“常规”选项卡中,分别指定要 备份的数据库、数据库备份的名称及数据库备份的描述(可忽略) 。 图 2.38  “SQL Server  备份”对话框  3)在“备份”栏中指定备份类型。  4)在“目的”栏中单击“添加”按钮,弹出“选择备份目的”对话框(如图 2.39  所示)。 在此对话框中选择备份到磁盘的形式是“文件名”还是“备份设备” ,这里选择备份的目的地 是“备份设备” ,从右边的下拉列表框中指定备份设备。若选择目的地是“文件名”形式,可 直接指定备份的物理位置和文件名, 或通过单击右边的 按钮指定备份的物理位置和文件名。 图 2.39  “选择备份目的”对话框  5)单击“确定”按钮返回如图  2.38  所示的对话框,此时“目的”栏中已经有了添加好 的备份设备(如图 2.40  所示)。若添加的设备错了,可单击“删除”按钮将其删除。通过单击 “内容”按钮查看选定的磁带或磁盘的内容。 图 2.40  已经添加好的备份设备

(32)

6)在图 2.38 的对话框 “重写”栏中,若指定“重写现有媒体” ,则将原备份重写;若指 定“追加到媒体” ,则保留原备份,并将新的备份追加至原备份之后。  7)在图  2.38  的对话框“调度”栏中,若选中调度复选框,单击文本框右边的 按钮, 则可更改当前的备份调度,如每天、每 2 天、每星期、每月等。根据需要设置。  8)在图 2.38  的对话框中,单击“选项”选项卡,执行下列一项或多项操作(可选):选 中“完成后验证备份”复选框,在备份时验证备份;选中“备份后弹出磁带”复选框,在备份 操作完成后弹出磁带,该选项只适用于磁带设备;选中“检查媒体集名称和备份集到期时间” 复选框, 检查备份媒体以防意外重写。 在 “媒体集名称” 框中输入将用于备份操作的媒体名称。 如果仅指定备份集到期时间,则将其保留为空。 如果是第一次使用备份媒体,或者要更改现有的媒体标签,则在“媒体集标签”框下选 中“初始化并标识媒体”复选框,然后输入媒体集名称和媒体集描述。只有在选择了“重写现 有媒体”时才能对其进行初始化和标识设置。  9)单击“确定”按钮,系统进行备份,备份完成后弹出“备份操作已顺利完成”对话框 (如图 2.41  所示),单击“确定”按钮,实现备份。 图 2.41  “备份操作已顺利完成”对话框  2.数据还原的基本操作 由于数据还原是静态的,所以在还原数据库时,需先限制用户对该数据库进行其他操作, 再进行数据还原。 (1)限制用户。 限制用户对数据库操作的设置方法可以是:在企业管理器中右击要还原的数据库,单击 “属性”命令,在弹出的数据库“属性”对话框中选择“选项”选项卡,在“访问”栏中选择 “限制访问”复选项,再选择“单用户”单选项,如图  2.42  所示。这样其他用户就不能访问 该数据库了。 图 2.42  设置用户访问数据库 (2)实现还原。 实现数据的还原可以使用企业管理器,也可以使用  Transact­SQL 语言的  RESTORE  命令

(33)

完成。这里只介绍使用企业管理器实现还原的操作,其操作步骤如下:  1)在企业管理器中右击任意一个数据库,选择“所有任务”→“还原数据库”命令,如 图 2.43 所示。 图 2.43  还原数据库选项  2)在弹出的“还原数据库”对话框(如图 2.44 所示)的“常规”选项卡中,通过“还原 为数据库”下拉列表框选择要还原的数据库名,也可以直接在它的文本框中输入数据库名(新 数据库名或已经存在的数据库名都行)。 图 2.44  “还原数据库”(“常规”选项卡)对话框  3)在“还原”栏中选择相应的备份类型。  4)在“参数”栏中,通过“显示数据库备份”下拉列表框选择数据库;通过“要还原的 第一个备份”下拉列表框选择要使用哪个备份来还原数据库。默认使用最近的一次备份。  5)在“还原数据库”对话框中选择“选项”选项卡(如图 2.45  所示),进行其他设置。 在图 2.45 中有三个复选项可以选定,即选定:在还原每个备份后均弹出磁带(如果有) ;在还 原每个备份前提示(提示用户以防无意中还原备份);在现有数据库上强制还原。在“将数据 库文件还原为”列表框中可以指定将要还原的数据库文件的名称和位置。在“恢复完成状态”

(34)

栏中有三个单选项,用户可根据恢复时的要求进行选择,即:使数据库可以继续运行,但无法 还原其他事务日志;使数据库不再运行,但能还原其他事务日志;使数据库为只读,但能还原 其他事务日志。当选择第三个单选项时,可以指定要撤消的文件的名称。 图 2.45  “还原数据库”(“选项”选项卡)对话框  6)设置完成后,单击“确定”按钮,完成数据还原操作。 【例 2.12】数据备份和还原操作综合示例。要求是:先将 SQL  Server  中的 Pubs  示例数 据库文件进行复制,然后将 Pubs 数据库附加为 Test_db4 数据库,再进行备份和还原。 根据题意分析可知,需做以下事情: (1)确定复制 Pubs 数据库文件到的目的地。设目的地为 F:\mydb 目录下。 (2)附加 Pubs 数据库为 Test_db4 数据库。 (3)确定备份的类型。 (4)根据备份类型设置适合还原的模型。 (5)创建备份设备。设创建的备份设备名称和物理位置为 F:\mydb\ Tbackup1。 (6)实现备份。先实现数据库完全备份,再实现事务日志备份。 (7)查看备份设备内容。 (8)限制用户对该数据库进行其他操作。 (9)实现还原。还原顺序采取:先数据库完全还原,再事务日志还原。 具体操作的步骤为:

(1)复制 Pubs 数据库。关闭 SQL  Server 服务器,在系统安装的路径 C:\Program  Files\  Microsoft SQL Server\MSSQL\Data 下,选择 pubs.mdf 和 pubs_log.ldf 两个文件进行复制,并粘 贴到 F:\mydb 目录下。 (2)附加 Pubs 数据库为 Test_db 数据库。启动 SQL Server 服务器,在企业管理器中右击 “数据库”文件夹,单击“所有任务”→“附加数据库”命令指定要附加的数据库 pubs.mdf, 在“附加为”文本框中重新输入  Test_db4,如图  2.46  所示。单击“确定”按钮,弹出“附加 数据库顺利完成”对话框,再单击“确定”按钮,完成操作。

(35)

图 2.46  附加 Pubs 数据库为 Test_db4 数据库 (3)确定备份类型为“完全备份加日志备份”的组合备份类型。 (4)根据备份类型,选择还原模型为“完全”还原模型。右击要备份的 Test_db4 数据库, 单击“属性”命令,在弹出的数据库“属性”对话框中选择“选项”选项卡,设置还原的模型 为“完全”还原模型(如图 2.47  所示),单击“确定”按钮,完成还原模型设置。 图 2.47  设置“完全”还原模型 (5)创建备份设备(在实现备份操作时,直接创建新备份设备)。右击要备份的 Test_db4  数据库,单击“所有任务”→“备份数据库”命令,在弹出的“SQL Server 备份—Test_db4” 对话框中(如图  2.48  所示)单击“添加”按钮,再在弹出的“选择备份目的”对话框中选择 “备份设备”单选项,从下拉列表框中选择“新备份设备”选项,如图 2.49 所示。 在弹出的“备份设备属性—新设备”对话框中输入备份设备名称和存放的位置,如图 2.50  所示。单击“确定”按钮,返回至图 2.49,此时图 2.49 的“备份设备”下拉列表框内出现新 创建的备份设置名称,即 Tbackup1 名称。再单击“确定”按钮,返回至“SQL Server 备份—  Test_db4”对话框。 (6)实现备份。在“SQL  Server  备份—Test_db4”对话框的“备份”栏中选择“数据库 —完全”单选项,在“重写”栏中选择“重写现有媒体”单选项,单击“确定”按钮,系统开 始进行数据库完全备份。 为了对照区别,在进行事务日志备份前,先对 Test_db4 数据库中的 jobs 表进行稍加修改, 其操作是:在企业管理器中展开  Test_db4  数据库,单击“表”对象,在右边的详细信息窗格 中右击 jobs 表,单击“打开表”→“返回所有行”命令,如图 2.51 所示。

(36)

图 2.48  “SQL Server 备份—Test_db4”对话框

图 2.49  选择“新备份设备”选项

图 2.50  “备份设备属性—新设备”对话框

(37)

如图 2.52 所示。在工具栏中单击运行按钮 ,然后关闭该数据表。 图 2.51  “返回所有行”选项 图 2.52  打开 jobs 表,修改指定数据 然后进行事务日志备份。打开数据库“属性”对话框,选择“常规”选项卡,在“备份” 栏中选择“事务日志”单选项,在“重写”栏中选择“追加到媒体”单选项,如图 2.53  所示。 单击“确定”按钮,系统开始进行事务日志备份。此时备份全部完成。 图 2.53  进行事务日志备份选择

(38)

(7)查看备份设备内容。在进行还原数据库前,可先查看一下备份设备的内容,其操作 是:在企业管理器中展开“管理”文件夹,单击“备份”按钮,在右边的详细信息窗格中右击 要查看的备份设备,选择“属性”命令,在弹出的“备份设备属性”对话框(如图 2.54 所示) 中,单击“查看内容”按钮,弹出“查看备份媒体内容”对话框,如图 2.55 所示。 图 2.54  “备份设备属性”对话框 图 2.55  “查看备份媒体内容”对话框 (8)限制用户操作。右击要还原的数据库,单击“属性”命令,在弹出的数据库“属性” 对话框中选择“选项”选项卡,在“访问”栏中选择“限制访问”复选项,再选择“单用户” 单选项,单击“确定”按钮完成用户限制,此时在企业管理左边的窗格中可以看到该数据库有 一个“单个用户”的标志,如图 2.56 所示。这样其他用户就不能访问该数据库了。 图 2.56  “单个用户”标志

(39)

(9)实现还原。先数据库完全还原。在企业管理器中,右击 Test_db4 数据库,选择“所 有任务”→“还原数据库”命令,在弹出的“还原数据库”对话框的“常规”选项卡中,选 择“还原”类型为“从设备” ,在“参数”栏中单击“选择设备”按钮,在弹出的“选择还 原设备”对话框中,单击“添加”按钮添加备份设备 Tbackup1(如图 2.57  所示),单击“确 定”按钮,返回至“还原数据库”对话框。再在“参数”栏中选择“数据库—完全” 单选 项。此时在“备份号”文本框中显示的数据应该为“1” ,若不是,可通过单击“查看内容” 按钮进行正确选择,如图  2.58  所示。切换至“选项”选项卡,在“完全恢复状态”栏中选 择“使数据库为只读,但能还原其他事务日志”单选项,如图  2.59  所示。单击“确定”按 钮,系统进行数据库完全还原操作,该操作完成后,再单击“确定”按钮,完成数据库完全 还原操作。 图 2.57  添加好 Tbackup1 备份设备对话框 图 2.58  选择备份号为 1 的备份 这时在企业管理器中看到 Test_db4 数据库名后多了“只读”两字。可打开 Test_db4 数据 库中的 jobs 表,查看 job_id 为 14 的记录 min_lvl 所对应的值,应该是 25。

(40)

图 2.59  选择“使数据库为只读,但能还原其他事务日志”单选项 下面进行事务日志还原。事务日志还原操作与数据库完全还原操作基本相同,区别是: 在“还原数据库”对话框的“参数”栏中选择“数据库—差异”单选项,选择备份号为 2 的备 份,如图 2.60  所示。切换至“选项”选项卡,在“完全恢复状态”栏中选择“使数据库可以 继续运行,但无法还原其他事务日志”单选项,如图 2.61  所示。单击“确定”按钮,系统进 行事务日志还原操作,该操作完成后,单击“确定”按钮,完成事务日志还原操作。 图 2.60  选择备份号为 2 的备份 图 2.61  选择“使数据库可以继续运行,但无法还原其他事务日志”单选项 此时,数据库还原操作完成。这时在企业管理器中看到  Test_db4  数据库名后的“只读” 两字没有了。再打开 Test_db4 数据库中的 jobs 表,查看 job_id 为 14 的记录 min_lvl 所对应的 值,应该是 100。

(41)

习题 2 

1.选择题 (1)下列( )不是 SQL 数据库文件的后缀。  A..mdf  B..ldf  C..tif  D..ndf  (2)SQL Server 数据库对象中最基本的是( )。  A.表和语句  B.表和视图  C.文件和文件组  D.用户和视图 (3)事务日志用于保存( )。  A.  程序运行过程  B.  程序的执行结果  C.  对数据的更新操作  D.  数据操作

(4)Master 数据库是 SQL Server 系统最重要的数据库,如果该数据库被损坏,SQL Server 将无法正常 工作。该数据库记录了 SQL Server 系统的所有( )。  A.  系统设置信息  B.  用户信息  C.  对数据库操作的信息  D.  系统信息 (5)SQL Server 中组成数据库的文件有( )种类型。  A. 2  B. 3  C. 4  D. 5  (6)分离数据库就是将数据库从( )中删除,但是保持组成该数据的数据文件和事务日志文件中 的数据完好无损。 

A. Windows  B. SQL Server  C. U 盘  D.  企业管理器 (7)以下( )是指对数据库的完整备份,包括所有的数据以及数据库对象。  A.  数据库完全备份  B.  数据库差异备份  C.  事务日志备份  D.  文件或文件组备份 (8)下面描述错误的是( )。  A.每个数据文件中有且只有一个主数据文件  B.日志文件可以存在于任意文件组中  C.主数据文件默认为 PRIMARY 文件组  D.文件组是为了更好地实现数据库文件组织 (9)下列文件中不属于 SQL Server 数据库文件的是( )。  A.device_data.MDF  B.device_log.LDF  C.device_mdf.DAT  D.device_data.NDF  (10)SQL Server  对象的完整名称不包括下面的( )。  A.服务器名  B.数据库名  C.对象名  D.文件夹名  2.填空题 (1)数据库逻辑结构中的文件主要存储__________,而且存储所有与__________相关的信息。 (2)数据库物理结构主要应用于面向计算机的__________组织和管理。 (3)SQL Server 的__________通常被称为数据库对象。

(42)

(4)使用 CREATE DATABASE 命令创建如下的数据库:  CREATE  DATABASE  Product 

ON  (name=product_date,  FILENAME=‘D:\Mydb\product.mdf ’ )  LOG ON  (name=product_log,  FILENAME=‘ D:\Mydb\product.ldf ’ )  则创建数据库名为__________,主数据文件的逻辑文件名是__________。 (5)事务日志文件是用来__________更新情况的文件,扩展名为.ldf。 (6)SQL  Server  中__________的基本单位是页,一页的大小为  8  千字节(KB)。页是存储数据的  __________单位。 (7)现有数据库 Archive 和 Art,要求使用下面的语句删除这两个数据库:  DROP DATEBASE Archive__________。 (8)当前数据库 Archive 的主数据文件为 AMAIN,执行以下语句:  ALTER DATABASE Archive  ADD FILE  ( NAME=ASEC,  FILENAME=´E:\MYTEST\ASECD.NDF´ )  则为数据库 Archive 添加了一个__________数据文件,其物理文件名是__________。 (9)使用分离和附加数据库的操作,可以将数据库从一台计算机__________到另一台计算机。 (10)还原数据库是一个__________数据库的备份,然后应用事务日志__________的过程。

參考文獻

相關文件

线性拟合与二次拟合 数据拟合的线性模型 一次多项式拟合公式..

超定方程组QR分解算法 数据拟合确定常微分方程..

USACO 是我认为最适合初学者的题库。他的特色是题目质量高,循序渐进,还 配有不错的课文和题目分析。做完了

学校现有教学仪器设备超过1亿元,学校图书馆纸质藏书125万册,电子图书

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

[r]

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

下面我们将用 这一点将一元函数的 Taylor 展开推广到多元函数.. 我们希望借助此给出多元函数