28
第 12 章 数据库备份与恢复及自动化管理 教学提示:避免数据丢失是数据库管理员需要面对的最关键的问题之一。虽然系统中 采取了各种措施来保障数据库的完整性和安全性,但是各种软硬件故障、病毒和误操作等 事件的发生,仍会影响甚至破坏数据库,造成数据丢失。数据库管理系统提供的数据库备 份和恢复的功能可以将数据库从错误的状态恢复到某一种正确的状态。 自动化执行系统任务使数据库环境在工作时间内能够始终运行在最优状态下,这是系 统管理员要追求的目标,也是本章的主要内容之一。 教学目标:本章的主要学习目的是了解数据库备份的重要性,掌握数据库的备份和恢 复方法,了解 SQL Server Agent 的概念、如何配置以及如何创建作业和警报。 12.1 数据库备份 数据库备份就是创建完整数据库的副本,并将所有的数据项都复制到备份集,以便在 数据库遭到破坏时能够恢复数据库。 对于计算机用户来说,对一些重要文件、资料定期进行备份是一种良好的习惯。如果 出现突发情况,比如系统崩溃、系统遭受病毒攻击等,使得原先的文件遭到破坏以至于全 部丢失,启用文件备份,就可以节省大量的时间和精力。 在备份数据库的时候,SQL Server 会执行下列操作。 将数据库所有的数据页写到备份介质上。 记录最早的事务日志记录的序列号。 把所有的错误日志记录写到备份介质上。 SQL Server 系统中,只有获得许可的角色才可以备份数据,分别是以下几种。 固定的服务器角色 sysadmin固定的数据库角色 db_owner固定的数据库角色 db_backupoperator当然,管理员也可以授权某些用户来执行备份工作。 执行备份后需要将备份的数据写到备份介质上,在 SQL Server 系统中主要有 3 种介质, 分别是磁盘文件、磁带和命名管道。 12.1.1 准备备份 SQL Server 备份是动态进行的。备份数据库的时机和频率主要根据特定的业务环境决 定。当然,有时候还要制定备份策略相配合。 1. 备份系统数据库 系统数据库存储了 SQL Server 和所有用户数据库的重要数据,所以应当定期地对其进

第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

  • Upload
    others

  • View
    38

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

第 12 章 数据库备份与恢复及自动化管理

教学提示:避免数据丢失是数据库管理员需要面对的最关键的问题之一。虽然系统中

采取了各种措施来保障数据库的完整性和安全性,但是各种软硬件故障、病毒和误操作等

事件的发生,仍会影响甚至破坏数据库,造成数据丢失。数据库管理系统提供的数据库备

份和恢复的功能可以将数据库从错误的状态恢复到某一种正确的状态。

自动化执行系统任务使数据库环境在工作时间内能够始终运行在最优状态下,这是系

统管理员要追求的目标,也是本章的主要内容之一。

教学目标:本章的主要学习目的是了解数据库备份的重要性,掌握数据库的备份和恢

复方法,了解 SQL Server Agent的概念、如何配置以及如何创建作业和警报。

12.1 数据库备份

数据库备份就是创建完整数据库的副本,并将所有的数据项都复制到备份集,以便在

数据库遭到破坏时能够恢复数据库。

对于计算机用户来说,对一些重要文件、资料定期进行备份是一种良好的习惯。如果

出现突发情况,比如系统崩溃、系统遭受病毒攻击等,使得原先的文件遭到破坏以至于全

部丢失,启用文件备份,就可以节省大量的时间和精力。

在备份数据库的时候,SQL Server会执行下列操作。

① 将数据库所有的数据页写到备份介质上。

② 记录最早的事务日志记录的序列号。

③ 把所有的错误日志记录写到备份介质上。

在 SQL Server系统中,只有获得许可的角色才可以备份数据,分别是以下几种。

① 固定的服务器角色 sysadmin。

② 固定的数据库角色 db_owner。

③ 固定的数据库角色 db_backupoperator。

当然,管理员也可以授权某些用户来执行备份工作。

执行备份后需要将备份的数据写到备份介质上,在 SQL Server系统中主要有 3种介质,

分别是磁盘文件、磁带和命名管道。

12.1.1 准备备份

SQL Server备份是动态进行的。备份数据库的时机和频率主要根据特定的业务环境决

定。当然,有时候还要制定备份策略相配合。

1. 备份系统数据库

系统数据库存储了 SQL Server和所有用户数据库的重要数据,所以应当定期地对其进

Page 2: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

SQL Server数据库设计与管理

·280·

·280·

行备份,尤其是在对其进行修改之后。

(1) 修改 master数据库备份数据库

master数据库包含了 SQL Server系统中有关数据库的全部信息。当用户创建任何自定

义的数据库时都要修改 master数据库,此时应该备份 master数据库。在 master数据库遭到

破坏时,就可以方便地恢复数据库。

此外,当执行下列语句或存储过程时,SQL Server会自动修改,此时也要备份 master

数据库。

① 创建、删除和修改数据库。例如 creat database、drop database和 alter database语句。

② sp_logdevice系统存储过程,用来修改事务日志。

③ 用于添加或者删除服务器的系统存储过程。例如 sp_addserver、sp_dropserver 系统

存储过程。

(2) 修改 msdb数据库备份数据库

msdb 数据库包含了 SQL Server 代理所使用的作业、警报和操作员的信息。因此,在

修改 msdb数据库之后,要备份 msdb数据库。如果没有备份,当系统发生故障时,必须重

建所有的系统数据库,然后再重建每个作业、警报和操作员。

(3) 修改 model数据库备份数据库

修改 model 数据库后也要对其进行备份,这样才能把更改后的所有用户数据库的默认

配置保存下来。

2. 备份用户数据库

用户应当定期的备份用户数据库。

(1) 创建数据库后备份数据库

创建数据库或为数据库填充了数据以后,用户应该备份数据库。

(2) 创建索引后备份数据库

虽然这不是必须的,但是如果以后数据库遭到破坏,就可以在还原过程中节省时间。

值得注意的是,如果在创建索引之后,只备份事务日志,在还原事务日志时,SQL Server

系统必须重建索引,重建索引的时间很长,甚至比还原完全备份数据库还要长。

(3) 清理事务日志后备份数据库

当执行了 backup log with truncate_only或者 backup log with no_log等语句清理事务日

志后,应该备份数据库。在清理之后,事务日志将不包含数据库的活动记录,也不能用来

还原数据库。

另外,执行不写入事务日志的操作时,也应该备份数据库。

3. 备份前的准备

为了保证数据库系统的安全,应该在执行备份之前制定一个可行的备份计划,计划中

应当考虑到以下几个方面。

① 备份的内容。

② 备份存储的位置。

③ 备份的频率。

④ 备份的介质。

Page 3: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

第 12章 数据库备份与恢复及自动化管理

·281·

·281·

12.1.2 执行备份

执行备份时,必须先创建包含备份的备份文件,可以是永久的或者临时的。下面分别

介绍备份数据库的方法。

1. 创建永久备份文件

创建永久性备份文件有以下两种方法。

① 使用 SQL Server 企业管理器。

② 使用 sp_addumpdevice系统存储过程。

使用 SQL Server 企业管理器创建永久性备份文件的过程如下所述。

① 运行“企业管理器”,展开服务器,展开【管理】容器,右击【备份】文件,然后

单击【新建备份设备】菜单项,如图 12.1所示。

② 在弹出的【备份设备属性—新设备】对话框中,指定备份设备的逻辑名称和文件名,

如图 12.2所示。

图 12.1 新建备份设备 图 12.2 【备份设备属性—新设备】对话框

③ 输入完成后,单击【确定】按钮。

使用 sp_addumpdevice系统存储过程创建永久性备份文件,语法形式为: sp_addumpdevice {¹device_type¹}

[,¹logical_name¹] [,¹physical_name¹]

[,{{controller_type | ¹device_status¹}}]

【例 12.1】 在硬盘上创建一个永久备份文件。 USE master

EXEC sp_addumpdevice ¹disk¹,¹mybackupfile¹,¹d:\backup\mybackupfile.bak¹

2. 创建临时备份文件

可以使用 backup database语句或者 SQL Server 企业管理器创建临时备份文件。在创建

临时备份文件时必须指定介质类型、完整路径和文件名。

BACKUP DATABASE的语法形式为: BACKUP DATABASE {database_name | @database_name_ var}

To <backup_device>[,…n]

Page 4: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

SQL Server数据库设计与管理

·282·

·282·

这里,<backup_device>指定备份操作时要使用的逻辑或物理备份设备,可以使用下列

形式: {{backup_device_name | @ backup_device_name _var} | [disk | tape | pipe]}

={temp_file_name | @temp_file_name_var}

【例 12.2】 在磁盘上创建临时备份文件,并把 northwind数据库备份到临时备份文件中去。 USE master

BACKUP DATABASE northwind to disk =¹d:\temp\mycus.bak¹

3.使用多个备份文件存储备份

SQL Server可以并行地将数据写入多个备份文件。这些文件存储了一个并行的备份集。

其语法形式为: BACKUP DATABASE {database_name | @database_name_ var}

To <backup_device>[,…n]

[WITH

[MEDIANAME = {media_name | @media_name _var}]

] 在使用多个备份文件存储备份时,应该考虑下面几种情况。

① 一个备份操作中所使用的所有设备必须是相同的介质。

② 创建备份集时,可以混合使用永久备份文件和临时备份文件。

③ 如果文件定义为备份集的成员,则必须总是一起使用这些文件。

④ 如果重新格式化备份集中的一个成员,则包含备份集中其他成员在内的数据也将

无效。

4.使用 BACKUP语句

可以使用 SOL Server 企业管理器、备份向导或 T-SQL执行备份操作。无论使用哪一种

备份方法,都应该熟悉可用的备份选项,语法形式为: BACKUP DATABASE {database_name | @ database_name _var}

To <backup_file >

[WITH

[[,]FORMAT]

[[,]INIT | NOINIT]

[[,]RESTART]

] 各选项的含义如下所述。

(1) INIT | NOINIT 选项

如果是 INIT 选项,SOL Server将重写备份媒体集上所有数据,但保留头信息。如果是

NOINIT 选项,SOL Server把备份追加到现有备份文件或备份集。SOL Server默认值将备

份追加到文件上。

(2) FORMAT 选项

使用 FORMAT 选项,可以重写备份文件的内容,执行下列操作。

① 在备份操作的所有文件上写入新的头信息。

② 重写现有的媒体和备份文件上的内容。

Page 5: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

第 12章 数据库备份与恢复及自动化管理

·283·

·283·

(3) RESTART 选项

如果选择 RESTART 选项,SOL Server系统将从中断点重新启动备份操作。

5. 用备份向导进行备份

使用备份向导的操作过程如下所述。

① 运行 SQL Server 企业管理器。

② 单击【工具】菜单,选择【向导】项,弹出如图 12.3所示的对话框。

③ 展开管理文件夹,运行【备份向导】,单击【下一步】按钮,选择要备份的数据库,

如图 12.4所示。

图 12.3 选择向导 图 12.4 选择要备份的数据库

④ 选择后,单击【下一步】按钮,弹出如图 12.5 所示的对话框,键入备份名称和描

述信息。

图 12.5 键入备份名称和描述

⑤ 单击【下一步】按钮,选择备份类型,如图 12.6所示。

Page 6: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

SQL Server数据库设计与管理

·284·

·284·

图 12.6 选择备份类型

⑥ 单击【下一步】按钮,选择备份设备,设置属性,如图 12.7所示。

图 12.7 选择备份目的和操作

⑦ 单击【下一步】按钮,设置媒体集名称和备份调度等,如图 10.8所示。

图 12.8 备份验证和调度

Page 7: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

第 12章 数据库备份与恢复及自动化管理

·285·

·285·

⑧ 单击【下一步】按钮,完成备份,在弹出的对话框中显示了备份信息,如图 12.9所示。

图 12.9 完成数据库备份向导

⑨ 单击【完成】按钮即可。

12.1.3 备份类型

在 SQL Server系统中,有 4种备份类型,分别如下所示。

① 完全数据库备份。

② 差异数据库备份。

③ 事务日志备份。

④ 数据库文件或文件组备份。

下面分别介绍这 4种类型的备份。

1. 完全数据库备份

如果数据库主要是只进行读操作,那么完全数据库备份能有效地防止数据库丢失。执

行完全数据库备份时,SQL Server执行下列操作。

① 备份在备份过程中发生的所有活动。

② 备份事务日志中的所有未提交事务。

【例 12.3】 创建逻辑设备名为 nbac的备份设备,并执行完全数据库备份。 USE master

EXEX sp_addumpdevice ¹disk¹, ¹nbac¹,

¹d:\mybak\nbac.bak¹

BACKUP DATABASE NORTHWIND TO NBAC

2. 差异数据库备份

为了减少还原频繁修改数据库的时间,可以执行差异备份。在执行差异备份之前必须

已经执行了完全数据库备份。差异备份只备份自上一次完全数据库备份发生改变的内容和

在差异备份过程中所发生的所有活动。

差异备份的语法形式为: BACKUP DATABASE {database_name | @database_name_ var}

Page 8: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

SQL Server数据库设计与管理

·286·

·286·

To <backup_file>[,…n]

[WITH

[[,]DIFFERENTIAL]

]

【例 12.4】 在临时备份文件上创建差异备份。 BACKUP DATABASE NORTHWIND

TO DISK=¹D:\MYBAC\BACKUPFILES.BAK¹

WITH DIFFERENTIAL

3. 事务日志备份

备份事务日志可以记录数据库的更改,但前提是在执行了完全数据库备份之后。进行

事务日志备份时,SQL Server执行下列操作。

① 备份从上一次成功执行BACKUP LOG语句之后的到当前事务日志结尾的这段事务

日志。

② 从事务日志活动部分的起点处截断事务日志,并丢弃不活动部分的信息。

备份事务日志的语法形式为: BACKUP LOG {database_name | @database_name _var}

To <backup_file>[,…n]

[WITH

[{INIT | NOINIT}]

]

【例 12.5】 为日志创建备份设备,并备份 northwind数据库的事务日志。 USE master

EXEC sp_addumpdevice ¹disk¹, ¹nwindbaclog¹,

¹d:\mybak\ nwindbaclog .bak¹

BACKUP LOG northwind TO nwindbaclog

4. 数据库文件或文件组备份

对超大型数据库执行完全数据库备份是不可行的,可以执行数据库文件或文件组备份。

备份文件或文件组时,可以只备份 FILE或 FILEGROUP 选项中指定的数据库文件。在备份

数据库文件或文件组时应考虑以下几点。

① 必须指定逻辑文件或文件组。

② 必须执行事务日志备份,使还原的文件与数据库的其他部分相一致。

③ 最多可以指定 16个文件或文件组。

④ 应制定轮流备份每个文件的计划。

数据库文件或文件组备份的语法形式为: BACKUP DATABASE {database_name | @database_name_ var}

[<file_or filegroup>[,…m]] TO <backupfile> [,…n] <file_or filegroup>的形式为: {FILE={logical_file_name | @logical_file_name _var}

|

FILEGROUP={logical_filegroup_name | @logical_filegroup_name _var}

Page 9: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

第 12章 数据库备份与恢复及自动化管理

·287·

·287·

}

【例 12.6】 数据库 INFO 由 4个文件组成,分别是 info1、info2、info3、info4,要求备份

info2 文件。事务日志文件存储在 infolog 中,且以下备份文件都已存在:info1backup、

info2backup、info3backup、info4backup、infobackuplog。 BACKUP DATABASE INFO

FILE=INFO2 TO INFO2BACKUP

BACKUP LOG INFO TO INFOBACKUPLOG

12.2 数据库恢复

数据库恢复就是把数据库备份加载到系统中。这是数据库管理员另一项非常重要的工

作。数据库备份是在正常情况下进行的,而数据库恢复是在诸如硬件故障、软件故障或误

操作等非正常的状态下进行的,因而其工作更加重要和复杂。

数据还原策略认为所有的数据库一定会在它们的生命周期的某一时刻需要还原。数据

库管理员职责中很重要的部分就是将数据还原的频率降到最低,并在数据库遭到破坏之前

进行监视,预计各种形式的潜在风险所能造成的破坏,并针对具体情况指定恢复计划,在

破坏发生时及时地恢复数据库。

在执行数据库恢复时,系统会自动执行某些操作。

当执行 RESTORE DATABASE语句时,SQL Server会进行安全检查。这样可防止用其

他数据库备份或者不完整的信息覆盖一个现有的数据库。

当出现下列几种情况时,SQL Server不能恢复数据库。

① 服务器上的数据库文件集和备份的数据库文件集不一致。

② 没有提供恢复数据库的全部文件或文件组。

③ RESTORE 语句中指定的数据库已经存在,并且备份文件中的数据库名称和

RESTORE语句中指定的名称不一致。

在执行恢复备份之前,应当验证备份,确认备份所包含的信息是否有效。可以通过使

用 SQL Server 企业管理器或使用 T-SQL中的 RESTORE语句来查看数据库的备份信息。

执行 RESTORE HEADERONLY可以返回下列信息。

① 备份文件或备份集的名称和描述。

② 备份媒体类型。

③ 备份方法。

④ 备份的时间和日期。

⑤ 备份的尺寸大小和序列号。

执行 RESTORE FILELISTONLY语句,可以返回下列信息。

① 数据库文件和事务日志文件的逻辑名称和物理名称。

② 文件类型。

③ 文件组的成员。

④ 备份集的大小。

⑤ 文件的最大容量。

Page 10: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

SQL Server数据库设计与管理

·288·

·288·

在恢复备份之前,还需要执行下面的两项任务。

① 限制对数据库的访问,将“db_owner,dbcreator 或者 sysadmin 的成员”的数据库

选项设为真。

② 备份事务日志,以保证数据库的一致性。

12.2.1 恢复过程

SQL Server 提供了两种恢复过程,自动恢复过程和手动恢复过程。

1. 自动恢复

自动恢复是指SQL Server数据库在每次出现错误或关机重启之后SQL Server都会自动

运行带有容错功能的特性。SQL Server用事务日志来完成这项任务,它读取每个数据库事

务日志的活动部分,并且检查所有自最新的检查点以来发生的事务。检查点就是最近一次

从内存中把数据变化永久写入到数据库中的那个时间点,标识所有已经提交的事务并回滚

它们,即把它们重新应用于数据库,然后标识所有未提交的事务并回滚,这样保证删除所

有未完全写入数据库的未提交事务。这个过程保证了每个数据库逻辑上的一致性。

SQL Server最先恢复 master数据库,接着恢复 model数据库和 msdb数据库,然后恢

复每一个用户数据库,最后清除并启动 tempdb数据库,结束恢复过程。

2. 手动恢复

手动恢复数据库需要指定数据库恢复工作的应用程序和接下来的按照创建顺序排列的

事务日志的应用程序。完成这些之后,数据库就会处于和事务日志最后一次备份时一致的

状态。

如果使用完全数据库备份来恢复,SQL Server重新创建这些数据库文件和所有的数据

库对象;如果使用差异数据库备份来恢复,则可以恢复最近的差异数据库备份。

12.2.2 恢复数据库

要恢复数据库,可以使用 SQL Server 企业管理器或者使用 RESTORE语句。

1. 使用 RESTORE语句

RESTORE语句的语法形式为: RESTORE DATABASE {database_name | @database_name _var}

[FROM <backup_file>[,…n]]

[WITH

[FILE=file_number]

[[,]MOVE ¹logical_file_name¹ TO ¹operating_system_file_name¹]

[[,]REPLACE]

[[,]{NORECOVERY | RECOVERY | STANDYBY=undo_file_name}]]

[[,]RESTART]

where <backup_file> is

{{backup_file_name | @ backup_file_name _var} |

{DISK | TAPE | PIPE}={¹temp_backup_file¹ | @temp_file_name _var}

}

Page 11: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

第 12章 数据库备份与恢复及自动化管理

·289·

·289·

各参数选项分别如下所述。

(1) RECOVERY

当恢复最近的事务日志或执行完全恢复时,为了使数据库返回到一致性状态,可以使

用此选项。

(2) NORECOVERY

有多个要恢复的备份时,使用此选项。

(3) FILE

使用此选项可以在多个备份文件中指定一个备份文件。

(4) RESTART

使用此选项可以继续已经中断的恢复过程,恢复过程从原先中断处继续。

(5) MOVE TO

使用此选项可以指定备份恢复的位置。

(6) REPLACE

只有在用另一个数据库的备份数据来替换现有数据库时,才使用该选项。

【例 12.7】 从永久备份文件恢复 northwind数据库。 USE master

RESTORE DATABASE northwind

FROM Nbac

2. 使用 SQL Server企业管理器

使用 SQL Server 企业管理器恢复数据库的步骤如下所述。

① 运行 SQL Server 企业管理器,选中相应的数据库,选择【工具】菜单,选择【还

原数据库】命令,出现如图 12.10所示的对话框。

图 12.10 【还原数据库】对话框

② 在【常规】选项卡中,选择恢复的类型和要恢复的数据库。

③ 在【选项】选项卡中,选择恢复使用的选项和恢复完成的状态,如图 12.11所示。

Page 12: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

SQL Server数据库设计与管理

·290·

·290·

图 12.11 【选项】选项卡

④ 单击【确定】按钮,执行恢复操作。

12.2.3 从不同的备份类型中恢复数据库

在还原数据库的时候,必须要了解执行的备份方法的类型和备份是否存在,并且要确

认备份文件包含要还原的备份,并确认备份是否有效且包含完整的备份集。

1. 从完全数据库备份中恢复

通常,在发生以下情况时,需要从完全数据库备份中恢复。

① 整个数据库的物理磁盘受损。

② 数据库受损或被删除。

从完全数据库备份还原数据库时,SQL Server会重新创建数据库和所有与其相关的文

件,并把它们放在原来的位置,所有的数据库对象也将被重新创建。

在实施完全数据库备份恢复时,并且没有任何事务日志或者差异备份,指定

RECOVERY 选项可以启动恢复过程,使数据库回到一致性状态。

2. 从差异备份中恢复

从差异备份中恢复数据库时,SQL Server只恢复数据库中自最近的完全数据库备份以

来的变化部分,在执行此种恢复时,应注意以下几点。

① 在执行从差异备份中恢复数据库之前,应先从完全数据库备份中恢复。

② 执行从差异备份中恢复数据库和从完全数据库备份中恢复的语法相同,不同点在于

FROM 子句中指定的备份文件不同。

③ 当有事务日志需要还原时,可以指定 NORECOVERY 选项。

3. 恢复事务日志备份

从事务日志备份恢复时,事务日志中记录的数据库更改都会被 SQL Server还原,它可

以将数据库还原到指定的时间点。在恢复事务日志备份之前,必须还原完全数据库备份。

Page 13: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

第 12章 数据库备份与恢复及自动化管理

·291·

·291·

语法形式为: RESTORE LOG {database_name | @database_name _var}

[FROM <backup_device>[,…n]]

[WITH

[{NORECOVERY | RECOVERY | STANDBY=undo_file_name}]

[[,]STOPAT={date_time | @date_time _var}]]

[[,]STOPBEFOREMARK=mark_name [AFTER date_time]]

4. 从文件或文件组恢复

如果某个文件受损,可以从文件或文件组备份恢复,语法形式为: RESTORE DATABASE {database_name | @database_name _var}

<file_or_filegroup> [,…m]

[FROM <backup_file> [,…n]]

where <file_or_filegroup> is

{FILE=logical_file_name | FILEGROUP=logical_filegroup_name}

12.2.4 恢复受损的系统数据库

1.重建系统数据库

如果存储系统数据库的媒体遭到破坏,就需要重建系统数据库。重建数据库需要使用

位于 C:\Program Files\Microsoft SQL Server\80\Tools\Binn文件夹里的 Rebuildm.exe工具。

2.恢复 master数据库

如果能启动 SQL Server服务,就可以用 RESTORE DATABASE 语句或者 SQL Server

企业管理器从一个有效的备份中还原系统数据库。

要还原master数据库,可以在命令提示符下输入 sqlservr-m选项以单用户模式启动SQL

Server服务,然后启动 SQL Server 查询分析器,使用还原数据库命令来还原 master数据库。

12.3 自动化执行系统管理任务

12.3.1 SQL Server Agent

与其他关系数据库管理系统相比,SQL Server 系统存在很多优势,如标准的 Window

界面,使系统管理员创建和管理数据及其他对象变得简单,使任务实现自动化管理,因此

降低成本。系统管理要执行多个不同的任务,比如监测一个或多个数据库、对数据库对象

进行优化和调试等。为了实现优化,必须有效地组织所有任务,以下是经常要执行并可以

自动化完成的重要管理任务。

① 实现数据完整性。

② 删除建立索引。

③ 传输数据。

④ 备份数据库和事务日志。

SQL Server 提供很多服务工具,主要是 SQL Server Agent 即 SQL Server代理,它是 SQL

Page 14: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

SQL Server数据库设计与管理

·292·

·292·

Server的一个非常有效的服务工具,负责自动执行 SQL Server管理任务。SQL Server代理

只有在保持 24 小时不间断运行并有足够权限的情况下,才能执行作业并触发警报。

12.3.2 启动 SQL Server Agent

在使用 SQL Server Agent执行管理任务的时候,首先连接到 SQL Server服务器,接着

设置 SQL Server Agent和 SQL Server之间的连接方式,然后启动,可以使用 SQL Server

管理器或企业管理器等方式启动,具体步骤如下所述。

① 运行 SQL Server 企业管理器,连接到相应服务器,打开【管理】项,如图 12.12所示。

② 右击【SQL Server 代理】项,出现如图 12.13所示的快捷菜单,然后选择【启动】

菜单项。

图 12.12 选择 SQL Server Agent 图 12.13 启动 SQL Server Agent

12.3.3 配置 SQL Server代理

SQL Server 代理的配置包括服务器登录账号和邮件配置文件的认证。安装时已经为

SQL Server代理指定了一个登录账号,本地用户登录账号或是域用户账号都可以用在 SQL

Server代理中,具体步骤如下所述。

① SQL Server代理启动后,仍然是右击鼠标,然后选择快捷菜单中的【属性】选项,

出现【SQL Server代理属性】对话框,如图 12.14所示。

图 12.14 【SQL Server代理属性】对话框

Page 15: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

第 12章 数据库备份与恢复及自动化管理

·293·

·293·

② 如图 12.14所示,选择【本账户】选项,并输入域用户账户,在密码栏输入该账户

密码。

③ 在【邮件会话】栏中指定邮件配置文件,可以使用Windows的Microsoft Outlook、

Exchange等建立。然后选择【‘已发送的邮件’文件夹中保存发送邮件副本】复选框。

④ 打开【连接】选项卡,如图 12.15所示,设置 SQL Server代理和 SQL Server服务

器之间的连接认证方式。

图 12.15 SQL Server代理连接配置

⑤ SQL Server 连接方法有两种选择,如图 12.15所示,使用Windows 身份验证和使用

SQL Server 身份验证。如果选择 SQL Server认证方式,需要提供一个具有系统管理员权限

的 SQL Server 登录账户。

⑥ 在【登录超时】选项中输入 SQL Server代理和 SQL Server服务器连接超时的最大时

限。

⑦ 选择【警报系统】选项卡,然后根据管理任务的需要进行设置,如图 12.16所示。

图 12.16 警报系统设置

Page 16: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

SQL Server数据库设计与管理

·294·

·294·

⑧ 其他选项卡根据需要进行配置,一般使用默认选项即可,如图 12.17、图 12.18所示。

图 12.17 SQL Server代理高级设置 图 12.18 SQL Server代理作业系统配置

12.4 创建作业和操作员

12.4.1 创建作业

在使一个任务能够自动化之前首先要创建一个相应的作业,可以使用创建作业向导的

方式和企业管理器来创建一个作业。使用对样例数据库进行自动备份为例,使用企业管理

器创建作业,其步骤如下所述。

① 在 SQL Server代理启动后,展开代理,选择【作业】项,如图 12.19所示。

② 右击鼠标,出现快捷菜单,选择【新建作业】菜单项,出现如图 12.20所示的对话框。

图 12.19 选择作业选项 图 12.20 新建作业

Page 17: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

第 12章 数据库备份与恢复及自动化管理

·295·

·295·

③ 在相应名称栏输入新建作业的名称,如 back_test。如果要管理多个作业,则选择分

类,一般选择默认即可。在描述栏中,添加描述内容。

④ 打开【步骤】选项卡,每个作业都必须有一个或多个步骤,如图 12.21所示。

图 12.21 选择【步骤】选项卡

⑤ 单击【新建】按钮,新建一个步骤,相关设置如图 12.22所示。

图 12.22 新建步骤 backup

⑥ 步骤名可以自定义,在【数据库】下拉列表框中选择要备份的数据库,在【命令】

文本框中输入相关命令,这里以备份为例,输入完成后可进行分析。单击【确定】按钮,

一个步骤创建结束。

⑦ 单击【确定】按钮后自动返回新建作业的【常规】选项卡窗口,这时已经存在一个

名为 backup的步骤,如图 12.23所示。

⑧ 打开【调度】选项卡,要使创建的作业在特定时刻自动发生或循环重复就要创建调

度表。每个作业可以有多个调度表,仍然以备份样例数据库为例,顺序创建调度,如图 10.24

所示。

Page 18: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

SQL Server数据库设计与管理

·296·

·296·

图 12.23 一个步骤创建成功

图 12.24 【调度】选项卡

⑨ 同样选择新建调度来创建一个新的调度表,配置如图 12.25所示。

图 12.25 新建作业调度窗口一

⑩ 如果选择调度类型为反复出现,则要对反复出现的时间进行具体设置,单击【更改】

按钮,然后根据自己的需要来设置即可,如图 12.26所示。

根据需要设置完毕后,单击【确定】按钮,返回到调度的首窗口,这样一个作业的

调度表根据用户的调度设置自动完成,如图 12.27所示。

Page 19: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

第 12章 数据库备份与恢复及自动化管理

·297·

·297·

图 12.26 新建作业调度窗口二

图 12.27 一个调度表设置完成

12.4.2 创建操作员

操作员是在警报发生时通过电子邮件、邮件寻呼或Windows网络信息传递命令所通知

的人,也就是当一个作业完成以后或出现错误的时候,要通知到相关人员,有多种可能通

告的方式。在将一个作业交给一个操作员之前,必须先为它创建一个条目。

创建操作员的方法可以有两种,一种是选择创建作业属性窗口中的【通知】选项卡,

当选择呼叫操作员选项的时候,会自动弹出对话框,如图 12.28所示。

图 12.28 创建操作员

另一种方法,选择 SQL Server代理下的操作员选项,单击鼠标右键,出现快捷菜单,

选择【新建操作员】命令即可。

以第二种方法创建一个操作员,其步骤如下所述。

① 根据第二种方法,会出现如图 12.29所示的对话框,根据用户自己的需要进行设置

即可。

Page 20: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

SQL Server数据库设计与管理

·298·

·298·

图 12.29 新建操作员属性

② 要在作业完成后通知一个或多个操作员,打开【通知】选项卡,选中相应的复选框,

除了电子邮件、呼叫器和 net send命令通告,还可以选择向 Windows事务日志写入信息,

如图 12.30所示。

图 12.30 设置通知窗口

12.5 警 报

在 SQL Server 2000中,关于作业执行和 SQL Server错误的消息将被存储在Windows

2000事务日志中。SQL Server Agent会读出此日志,并将存储的信息与系统定义的警告相

比较,如果匹配,SQL Server Agent将首先发出警告。因此,可以通过创建警报来对潜在

的问题做出响应。

可以创建警报响应 SQL Server错误,在 SQL Server错误发生时触发响应,可以为其指

Page 21: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

第 12章 数据库备份与恢复及自动化管理

·299·

·299·

定错误号;也可以创建警报响应用户定义错误即为个人数据库应用程序用户定义错误消息,

这样可以定义解决方案并在问题发生前加以防范。

可以使用“创建警报向导”来创建警报,也可以直接使用 SQL Server 企业管理器创建。

1. 使用创建警报向导

其步骤如下所述。

① 在 SQL Server 企业管理器【工具】菜单中找到【创建警报向导】菜单项,【创建

警报向导】对话框如图 12.31所示。

图 12.31 【创建警报向导】对话框

② 在【定义警报】页,单击【出现任何严重错误时】单选按钮,然后在下拉列表中指

定严重性级别,如果 SQL Server事件达到或超出该级别时,就会触发警报,如图 12.32所示。

图 12.32 “创建警报向导”中的“定义警报”页

也可以单击【仅在出现此错误时】单选按钮,指定错误发生时才触发警报。单击后面

的省略号按钮来选择错误号,如图 12.33所示。

Page 22: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

SQL Server数据库设计与管理

·300·

·300·

图 12.33 【管理 SQL Server消息】对话框

可以基于文本、错误号和严重性级别来搜索错误消息;也可以仅搜索记入日志的消息

或用户定义的消息。定义搜索参数后,单击【查找】按钮开始查询。图 12.34 显示搜索的

结果。

图 12.34 显示查找结果

③ 在【指定数据库或错误关键字】页,可以指定事件必须在特定数据库中发生或者事

件必须包含指定文本,如图 12.35所示。

Page 23: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

第 12章 数据库备份与恢复及自动化管理

·301·

·301·

图 12.35 指定数据库或错误关键字

④ 在【定义警报响应】页中,指定对该警报的响应,如图 12.36所示。

图 12.36 定义警报响应

⑤ 在【定义警报通知信息】页中,指定要发送给操作员的消息文本,如图 12.37所示。

图 12.37 定义警报通知信息

Page 24: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

SQL Server数据库设计与管理

·302·

·302·

⑥ 在【正在完成创建警报向导】页中,为警报创建名称,查看所做的选择,如图 12.38

所示。

图 12.38 【正在完成创建警报向导】页

2.使用 SQL Server 企业管理器

可以直接使用 SQL Server 企业管理器来创建警报。右击【管理】容器中的 SQL Server

代理,选择【新建】命令,然后单击【警报】选项,出现【新建警报属性】对话框,如图

12.39、图 12.40所示。

图 12.39 【新建警报属性】常规选项卡 图 12.40 【新建警报属性】响应选项卡

在【常规】和【响应】选项卡中,进行需要的设置即可创建警报。

3.使用 T-SQL

可以使用 sp_add_alert、sp_update_alert和 sp_add_notification系统存储过程来定义警报。

Page 25: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

第 12章 数据库备份与恢复及自动化管理

·303·

·303·

12.6 上 机 指 导

1. 已知在一个备份文件上有一个完全数据库备份和两个事务日志备份,只还原发生在

2002年 5月 2号凌晨 2 点之前的更改。编写程序,执行三个独立的还原操作以确保数据库

的一致性。

目的是利用 Transact-SQL语句从不同的数据备份中恢复数据。

① 从完全数据库中还原,但是不恢复数据库。 USE master

RESTORE DATABASE northwind

FROM nwindbac

WITH NORECOVERY ② 还原第一个事务日志,但是不恢复数据库。 USE master

RESTORE LOG northwind

FROM nwindlogbac

WITH FILE=1,

NORECOVERY ③ 还原第二个事务日志,应用发生在 2002年 5月 2号凌晨 2 点之前的更改,并恢复

数据库。 USE master

RESTORE LOG northwind

FROM nwindlogbac

WITH FILE=2

RECOVERY,

STOPAT=¹MAY 2 ,2002 2:00 AM¹ 2. 建立事件警报。

目的是练习使用警报来处理 SQL Server事件。

① 运行 SQL Server 企业管理器,连接到相应的服务器,展开【管理】文件夹,展开

SQL Server代理,右击【警报】项,选择【新建警报】菜单项,如图 12.41所示。

图 12.41 新建警报

Page 26: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

SQL Server数据库设计与管理

·304·

·304·

② 在属性对话框中,打开【常规】选项卡,输入新建警报名称“PERMISSION ALERT”,

在表示错误等级的【严重度】下拉列表框中选择“014 权限不足”,在【数据库名称】下

拉列表框中选择触发警报的数据库,如图 12.42所示。

图 12.42 警报属性常规设置

③ 打开【响应】选项卡,设置通过电子邮件、呼叫程序和网络发送的途径向操作员发

送消息的时候包含错误记录,设置两次连续警报之间的时间间隔为 30秒,如图 12.43所示。

图 12.43 警报属性响应设置

④ 单击【确定】按钮,完成警报的设置。警报建立之后,SQL Server 代理将监视 14

号事件的发生,如果发生则向操作员发送消息。

Page 27: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

第 12章 数据库备份与恢复及自动化管理

·305·

·305·

习 题

1. 填空题

(1) 在 SQL Server系统中,有 4种备份类型,分别是____、____、____和____。

(2) SQL Server 提供了两种恢复过程,即____过程和____过程。

(3) SQL Server Agent 即__________。

(4) 在使用 SQL Server Agent执行管理任务的时候,首先连接到__________。

(5) 指定邮件配置文件,可以使用Windows的_________、_________等建立。

(6) 作业执行和 SQL Server错误的消息将被存储在__________中。

2. 选择题

(1) 下面哪一项表示要执行差异备份:( )。

A. Recovery B. Norecovery C. Differential D. Noint (2) 下面哪一个命令用来重建系统数据库:( )。

A. Recovery.exe B. Restart.exe C. Reunite D. Rebuildm.exe (3) 以下不是经常要执行并可以自动化完成的重要管理任务是:( )。

A. 删除建立索引 B. 创建数据库 C. 实现数据完整性 D. 传输数据

(4) SQL Server 提供很多服务工具,主要用于自动执行管理任务的是:( )。

A. 备份 B. 传输 C. SQL Server代理 D. 显示日志

(5) 要执行自动执行管理任务之前,首先要对 SQL Server Agent进行:( )。

A. 启动 B. 配置 C. 添加任务 D. 更新任务

(6) 下面哪一项不是在警报发生时通知操作员的方法:( )。

A. 电子邮件 B. 邮件寻呼

C. 添加任务 D. Windows网络信息传递命令

3. 判断题

(1) 在 SQL Server系统中,任何角色都可以备份数据。 ( )

(2) SQL Server备份是动态进行的。 ( )

(3) 一个备份操作中所使用的所有设备必须是相同的介质。 ( )

(4) 在恢复事务日志备份之前,必须还原完全数据库备份。 ( )

(5) 使用 SQL Server Agent执行管理任务时,无需连接到 SQL Server服务器。

( ) (6) 在 SQL Server错误发生时触发响应,可以为其指定错误号。 ( )

4. 简答题

(1) 在备份数据库的时候,SQL Server需执行哪些操作?

(2) 什么是差异备份,主要用于什么情况下?

(3) 使用 RESTORE语句时,RECOVERY 选项有什么作用?

Page 28: 第 12 章 数据库备份与恢复及自动化管理read.pudn.com/downloads152/ebook/661195/ch12.pdf第 12 章 数据库备份与恢复及自动化管理 ... 此外,当执行下列语句或存储过程时,SQL

SQL Server数据库设计与管理

·306·

·306·

(4) 经常要执行并可以自动化完成的重要管理任务有哪些?

(5) 操作员的工作是什么?

5. 操作题

(1) 为 SQL Server系统事务日志创建备份设备,并备份 employee数据库的事务日志。

(2) 对 northwind数据库执行完全数据库备份,然后执行完全数据库恢复。

(3) 创建一个名为 student的作业。

(4) 使用自己的姓名创建一个操作员管理(3)题的 student作业。