193.数据库备份和恢复

第13章  数据库备份与恢复

•    13.1 备份和恢复

•    13.2 完整数据库备份与恢复

•    13.3差异数据库备份与恢复

•    13.4 事务日志备份与恢复

•    13.5 一种备份案例

13.1.1 备份和恢复的概念

Ø 前面两章分别介绍了通过数据的完整性控制和安全性控制来保证数据的安全,但这种安全是相对的。不但数据库管理系统软件本身可能会出现问题,而且作为硬件支撑的计算机也有可能出现不可修复的故障,还有自然灾害等不可抗拒的客观因素,这些都有可能造成数据的损坏或丢失,而避免这些损坏和丢失不是完整性控制和安全性控制“力所能及”的。因此,需要寻求另一种数据保护措施——数据备份和恢复。

Ø 备份,就是定期地把数据库复制到转储设备的过程。其中,转储设备是指用于存储数据库拷贝的磁带或磁盘,存储的数据称为后备副本或后援副本,或直接称备份。

Ø 恢复,就是利用备份的后备副本把数据库由存在故障的状态转变为无故障状态的过程。备份和恢复的目的是在数据库遭到破坏时能够恢复到破坏前的正确状态,避免或最大限度地减少数据丢失。

Ø 如何有效对数据库进行备份和恢复,使得即使出现数据库故障时也能够避免数据丢失或将数据损失减少到最小程度,这就是数据库备份和恢复要讨论的内容。

13.1.2 恢复模式及其切换

        恢复模式一共有三种:简单模式、完整模式和大容量日志模式。数据备份需要在给定的恢复模式下完成,这意味着在不同的恢复模式下所备份的内容和方法将有所不同。

1. 简单恢复模式

Ø 此恢复模式的主要特点是只对数据进行备份,而不对日志进行备份,因而不需要管理事务日志空间。因此,简单恢复模式可最大程度地减少事务日志的管理开销。简单恢复模式是最简单的备份和还原形式。该恢复模式同时支持数据库备份和文件备份(不支持日志备份)。但是使用这种模式将面临很大的风险:如果数据库损坏,则简单恢复模式只能将数据恢复到最近数据备份的末尾,而在最近数据备份之后所做的更新便会全部丢失。

Ø 通常,简单恢复模式用于测试和开发数据库,或用于主要包含只读数据的数据库(如数据仓库)。简单恢复模式并不适合生产系统,因为对生产系统而言,丢失最新的更改是无法接受的。在这种情况下,建议使用完整恢复模式。

2. 完整恢复模式

Ø  该模式不但支持数据备份,而且支持日志备份,即此模式完整记录所有事务,并将事务日志记录保留到对其备份完毕为止。如果能够在出现故障后备份日志尾部,则可以使用完整恢复模式将数据库恢复到故障点。完整恢复模式也支持还原单个数据页,支持数据库备份、文件和文件组备份。

Ø  由于支持日志备份,因此完整恢复模式可以在最大范围内防止出现故障时丢失数据,可以将数据库还原到日志备份内包含的任何时点(“时点恢复”)。假定可以在发生严重故障后备份活动日志,则可将数据库一直还原到没有发生数据丢失的故障点处。这是完整恢复模式的优点。但它也存在着缺点:需要使用存储空间并会增加还原时间和复杂性。

Ø  从还原程度看,完整恢复模式是最理想的,但是这种模式是很“沉重的”(备份的内容多),因此对包含数据量很大的数据库而言,其时间和空间代价都是昂贵的。

3. 大容量日志恢复模式

Ø 此模式是完整恢复模式的附加模式,是一种特殊用途的恢复模式,偶尔用于执行高性能的大容量复制操作。与完整恢复模式相同的是,大容量日志恢复模式也需要日志备份,它将事务日志记录保留到对其备份完毕为止;不同的是,大容量日志恢复模式通过使用最小方式记录大多数大容量操作,减少日志空间使用量,不支持时点恢复,这容易造成一些数据库更改的丢失。

Ø 大容量日志恢复模式也支持数据库备份、文件和文件组备份,它适用于进行一些大规模大容量操作(如大容量导入或索引创建),以提高性能并减少日志空间使用量。

Ø  恢复模式是数据库的一项属性,可以通过查看系统目录视图来获得数据库的恢复模式信息。

【例子】查看数据库MyDatabase的恢复模式可以利用下列代码实现:

SELECT name 数据库名, recovery_model_desc 恢复模式

FROM sys.databases

WHERE name = 'MyDatabase';

Ø  在输出的结果中,SIMPLE、FULL和BULK_LOGGED分别代表简单恢复模式、完整恢复模式和大容量日志恢复模式。

Ø  恢复模式的切换可用ALTER DATABASE语句来完成。例如,将数据库MyDatabase的恢复模式改为大容量日志恢复模式,可用下列语句实现:

ALTER DATABASE MyDatabase SET RECOVERY BULK_LOGGED;

Ø  将恢复模式改为完整恢复模式或者简单恢复模式,只需要将上述语句中的BULK_LOGGED改为FULL或SIMPLE即可。

        纵观以上三种模式,简单恢复模式一般适合用于测试或开发数据库。但是,对于生产数据库,最佳选择通常是完整恢复模式,还可以选择大容量日志恢复模式作为补充。但简单恢复模式有时也适合小型生产数据库或数据仓库使用。

13.1.3 备份类型

    备份类型主要包括完整备份、差异备份和事务日志备份。在不同的恢复模式下,所允许的备份类型有所不同。

1. 完整备份

Ø 完整备份是指备份包括特定数据库(或者一组特定的文件组或文件)中的所有数据,以及可以恢复这些数据的足够多的日志信息。当数据库出现故障时可以利用这种完整备份恢复到备份时刻的数据库状态,但备份后到出现故障的这一段时间内所进行修改将丢失。

Ø 完整备份在所有模式下都适用。

2. 差异备份

Ø 差异备份又称增量备份,是指对自上次完整备份以来发生过变化的数据库中的数据进行备份。可以看出,对差异备份的恢复操作不能单独完成,在其前面必须有一次完整备份作为参考点(称为基础备份),因此差异备份必须与其基础备份进行结合才能将数据库恢复到差异备份时刻的数据库状态。此外,由于差异备份的内容与完整备份的内容一样,都是数据库中的数据,因此它所需要的备份时间和存储空间仍然比较大。由于差异备份只记录自基础备份以来发生变化的数据(而不是所有数据),所以它较完整备份在各方面的性能都有显著的提高,这是它的优点。

Ø 差异备份也适用于所有恢复模式。

3. 事务日志备份

Ø 事务日志备份简称日志备份,它记录了自上次日志备份到本次日志备份之间的所有数据库操作(日志记录)。由于日志备份记录的内容是一个时间段内的数据库操作,而不是数据库中的数据,因此在备份时所处理的数据量小得多,因而所需要的备份时间和存储空间也就相对小得多。但它也不能单独完成对数据库的恢复,而必须与一次完整备份相结合。实际上,“完整备份+日志备份”是常采用的一种数据库备份方法,这将在下面的学习中有深刻体会。

Ø 日志备份又分为纯日志备份、大量日志备份和尾日志备份。

•       纯日志备份仅包含某一个时间段内的日志记录;

•       大量日志备份则主要用于记录大批量的批处理操作;

•       尾日志备份主要包含数据库发生故障后到执行尾日志备份时的数据库操作,以防止故障后相关修改工作的丢失。自SQL Server 2005开始,一般要求先进行尾日志备份,然后才能恢复当前数据库。

Ø 事务日志备份仅适用于完整恢复模式或大容量日志恢复模式,不适用于简单恢复模式。

第13章  数据库备份与恢复

•    13.1 备份和恢复

•    13.2 完整数据库备份与恢复

•    13.3差异数据库备份与恢复

•    13.4 事务日志备份与恢复

•    13.5 一种备份案例

13.2.1 完整数据库备份

完整数据库备份是对数据库中所有的数据进行备份,因此需要较大的存储空间。

【例13.1】在简单恢复模式下对数据库MyDatabase进行完整备份。

首先创建一个逻辑备份设备MyDatabase_disk,它映射到磁盘文件D:BackupMyDatabase_disk.bak;然后利用BACKUP DATABASE语句将数据库MyDatabase完全备份到逻辑备份设备MyDatabase_disk中,实际上备份的数据将保存到磁盘文件D:BackupMyDatabase_disk.bak中。代码如下:

USE master;  -- 目的是关闭数据库MyDatabase

GO

ALTER DATABASE MyDatabase SET RECOVERY SIMPLE;  -- 切换到简单恢复模式下

GO

-- 创建备份设备

EXEC sp_addumpdevice 'disk', 'MyDatabase_disk', 'D:BackupMyDatabase_disk.bak';

GO

-- 进行完整数据库备份

BACKUP DATABASE MyDatabase TO MyDatabase_disk WITH FORMAT;

GO

ü  针对例13.1,选项FORMAT的作用是以覆盖媒体标头和备份集的方式向文件MyDatabase_disk.bak中写入数据(如果该文件不存在则创建它)。实际上,利用FORMAT选项可以覆盖任意现有备份并创建新媒体集,从而创建一个完整数据库备份。

ü  系统目录视图sys.backup_devices保存了逻辑备份设备的有关信息,因此通过查询此目录视图可以获取逻辑备份设备的相关情况:,

SELECT * FROM sys.backup_devices

ü  如果要删除已有的备份设备,可用系统存储过程sp_dropdevice来实现。

   【例子】执行下列语句将删除备份设备MyDatabase_disk:

EXEC sp_dropdevice 'MyDatabase_disk';

ü  本例中也可以不使用逻辑备份设备而直接将数据备份到磁盘文件中。

   【例子】上述代码中的BACKUP DATABASE语句也可以写成:

BACKUP DATABASE MyDatabase TO DISK = 'D:BackupMyDatabase_disk.bak' WITH FORMAT;

ü  备份文件MyDatabase_disk.bak保存了备份时刻数据库MyDatabase中的所有数据,包括日志信息等。

13.2.2 完整数据库恢复

Ø 利用备份文件,可以将数据库恢复到备份时刻的状态。

【例13.2】利用例13.1中的完整备份对数据库进行恢复。

 例13.1中,对数据库MyDatabase进行完整备份后得到备份文件MyDatabase_disk.bak。本例则利用此文件恢复数据库MyDatabase,代码如下

RESTORE DATABASE MyDatabase FROM DISK = 'D:BackupMyDatabase_disk.bak’; 

    执行上述语句后数据库MyDatabase将恢复到对其进行备份时的状态。由于是在简单模式进行备份,故恢复时在任何一种模式下效果都一样。如果备份操作是在完整模式下进行的,则恢复操作时也要在完整模式下进行,这时要涉及到尾日志备份和恢复。

【例13.3】在完整模式下对数据库MyDatabase进行完整备份,然后对其进行恢复。

首先在完整模式下对数据库MyDatabase进行完整备份:

USE master;  --关闭数据库MyDatabase

GO

ALTER DATABASE MyDatabase SET RECOVERY FULL;  -- 切换到完整恢复模式下

GO

-- 完整数据库备份

BACKUP DATABASE MyDatabase TO DISK = 'D:BackupMyDatabase_full.bak' WITH FORMAT;  

GO

此后在数据库出现故障时利用获得的备份文件MyDatabase_full.bak,对数据库MyDatabase进行恢复:

USE master;

GO

ALTER DATABASE MyDatabase SET RECOVERY FULL;  -- 切换到完整恢复模式下

-- 先进行尾日志备份才能恢复数据库

BACKUP LOG MyDatabase TO DISK = 'D:BackupMyDatabase_full.bak' --尾日志备份(必须在完整恢复模式下进行尾日志备份)

WITH NORECOVERY;      

GO

-- 恢复数据库

RESTORE DATABASE MyDatabase FROM DISK = 'D:BackupMyDatabase_full.bak'; 

GO

第13章  数据库备份与恢复

•    13.1 备份和恢复

•    13.2 完整数据库备份与恢复

•    13.3差异数据库备份与恢复

•    13.4 事务日志备份与恢复

•    13.5 一种备份案例

Ø  完整数据库备份相当于对整个数据库进行复制。当数据量很大时,这种操作是费时的,且会严重降低系统的性能。因此,完整数据库备份是一种“沉重”的备份操作,不宜经常性进行这种的备份。这时可以寻求一种“轻量级”的备份方法——差异备份。

Ø  差异备份是指自创建完整备份以后对更改的数据区所进行的备份。可见,差异备份需要基于一个最近的完整备份(称为基础备份)。由于它不需要对整个数据库进行备份,因而差异备份具有存储空间耗费少、创建速度快等优点。通常的做法是,在某个特定的时间进行一次完整备份,然后(定时)进行相继的若干个差异备份。还原时,先还原完整备份,然后再还原最新的差异备份即可。

Ø  本节主要介绍差异数据库备份及基于完整备份和差异备份的恢复方法。

13.3.1 差异数据库备份

Ø 差异数据库备份也是使用BACKUP DATABASE语句来完成。与完整数据库备份不同的是,用于差异数据库备份的BACKUP DATABASE语句要带DIFFERENTIAL选项。

【例13.4】创建差异数据库备份。

先创建完整数据库备份,然后创建差异数据库备份,并写入到同一个备份文件或备份设备中。代码如下:

•         在创建完整数据库备份后,可定期地多次执行下列代码(相对完整备份来说,其执行时间会很短),以保存最新的数据库状态:

•      -- 差异数据库备份

BACKUP DATABASE MyDatabase

TO DISK = 'D:BackupMyDatabaseBackup.bak'

WITH DESCRIPTION = '第1次差异备份',

DIFFERENTIAL;

GO

Ø  备份文件MyDatabaseBackup.bak保存了基础备份以及所有的差异数据库备份。建议每执行一次差异备份代码,就修改一次其描述信息,以示不同的差异备份。

 【例子】在第一次执行时,令DESCRIPTION = '第1次差异备份',第二次时令DESCRIPTION = '第2次差异备份’,等。

Ø  如果备份时使用同一个备份文件,那么每当进行一次备份(包括基础备份),都会在备份设备(备份文件)中形成一个备份集,其位置(Position属性值)依次为1, 2, 3, 4, …。可用RESTORE HEADERONLY语句查看备份设备中的备份集。

 【例子】如果在本例中,先执行一次完整数据库备份的代码,然后依次四次执行差异备份的代码(间隔一定的时间),接着执行RESTORE HEADERONLY语句来查看备份集。RESTORE HEADERONLY语句如下:

   RESTORE HEADERONLY FROM DISK = 'D:BackupMyDatabaseBackup.bak‘;

    该语句执行后,产生如图13.1所示的结果。

13.3.2 差异数据库恢复

Ø 利用差异备份及其基础备份所得到的备份文件,将数据库恢复到任何一次备份时的状态。

【例13.5】利用差异备份,将数据库恢复到指定的状态。

    本例中利用例13.4形成的备份文件MyDatabaseBackup.bak,将数据库恢复到第3次差异备份时的数据库状态。

    在例13.4中,一共对数据库MyDatabase进行5次备份,其中第1次是完整备份,接着进行了4次差异数据库备份,因此在备份文件MyDatabaseBackup.bak中形成了五个备份集。显然,第3次差异备份所形成的备份集的位置(Position)是4,因此在利用备份集1(Position值为1的备份集)来恢复数据库后,接着要利用备份集4来恢复数据库,即可满足本例的恢复要求。完整代码如下:

USE master;

GO

ALTER DATABASE MyDatabase SET RECOVERY FULL; 

GO

-- 先进行尾日志备份,进入还原状态

BACKUP LOG MyDatabase TO DISK = 'D:BackupMyDatabaseBackup.bak' WITH NORECOVERY;

GO

-- 利用备份集1(备份集1对应基础备份,必须先对基础备份进行恢复,即先令FILE = 1)

RESTORE DATABASE MyDatabase FROM DISK = 'D:BackupMyDatabaseBackup.bak'

WITH FILE = 1, NORECOVERY;  -- 此处FILE = 1

GO

-- 利用备份集4(表示要将数据库恢复到第3次差异备份时的数据库状态)

RESTORE DATABASE MyDatabase FROM DISK = 'D:BackupMyDatabaseBackup.bak'

WITH FILE = 4, NORECOVERY; 

GO

RESTORE DATABASE MyDatabase WITH RECOVERY; -- 恢复数据库(经过此步后,数据库才真正恢复完毕)

GO

Ø  如果希望将数据库恢复到第4次差异备份时的数据库状态,则只需将上述代码中的“FILE = 4”改为“FILE = 5”即可,其他情况依此类推。

Ø  从上述代码可以看到,“恢复到第3次差异备份时的数据库状态”只需要第1个备份集和第4个备份集,而第2和3个备份集是不需要的,即它们是多余的。因此,差异备份仍然出现较大的数据冗余。

第13章  数据库备份与恢复

•    13.1 备份和恢复

•    13.2 完整数据库备份与恢复

•    13.3差异数据库备份与恢复

•    13.4 事务日志备份与恢复

•    13.5 一种备份案例

13.4.1 事务日志备份

u事务日志备份也简称日志备份,包括创建备份时处于活动状态的部分事务日志,以及先前日志备份中未备份的所有日志记录。日志备份只能在完整模式和大容量日志恢复模式下才能创建。使用日志备份,可以将数据库恢复到故障点或特定的时点。创建日志备份的频率取决于用户对数据丢失风险的容忍程度与用户所能存储、管理和潜在还原的日志备份数量之间的平衡。由于日志备份并不是对数据进行备份,而是对相关操作进行记录,因此日志备份集一般比其他备份集要小得多。日志备份的每一次创建都是对上一次备份之后的操作进行记录,因此备份得越频繁,所形成的备份集就越小。

u日志备份也依赖于最近的一次完整数据库备份,没有这样的完整数据库备份,而仅仅利用日志备份是无法恢复数据库的。在这一点上,日志备份与差异数据库备份很相似,但它们之间存在本质上的差别:每一次日志备份都是对上一次日志备份之后到现在为止所进行的操作进行记录(备份操作记录,而不是数据本身),差异数据库备份则是对自创建完整备份以后被更改的数据区进行备份(对数据本身进行备份)。

u创建日志备份可利用BACKUP LOG语句来完成,下面通过例子对其进行说明。

【例13.6】对指定数据库创建日志备份。

Ø  日志备份要依赖于最近一次完整数据库备份,否则不能恢复数据库。本例以数据库MyDatabase为例,介绍如何对其进行日志备份。

Ø  本例中,先创建数据库的完整备份,然后依次创建四个日志备份。代码如下:

-- 创建日志备份2

BACKUP LOG MyDatabase TO DISK = 'D:BackupMyDatabase_Log.bak'

WITH DESCRIPTION = '3. 创建日志备份2';

GO

-- 创建日志备份3

BACKUP LOG MyDatabase TO DISK = 'D:BackupMyDatabase_Log.bak'

WITH DESCRIPTION = '4. 创建日志备份3';

GO

-- 创建日志备份4

BACKUP LOG MyDatabase TO DISK = 'D:BackupMyDatabase_Log.bak'

WITH DESCRIPTION = '5. 创建日志备份4';

GO

13.4.2 事务日志恢复

u 在利用日志备份(事务日志备份)恢复数据库之前,先利用最近的完整数据库备份来恢复数据库,然后再利用日志备份恢复数据库。日志备份恢复可利用RESTORE LOG语句来实现。

【例13.7】利用已有的日志备份恢复数据库到指定的状态。

Ø 本例中,利用例13.6产生的备份文件对数据库MyDatabase进行恢复,要求将之恢复到日志备份3时的状态。

Ø 例13.6中,一共进行了5次备份,其中第1次是完整数据库备份,后面接着是4次日志备份,即这些备份集依次是备份集1、备份集2、备份集3、备份集4、备份集5。这些备份集都保存在D:BackupMyDatabase_Log.bak文件中,可利用RESTORE HEADERONLY语句来查看此文件(备份文件或备份设备)中所有备份集的信息:

RESTORE HEADERONLY FROM DISK = 'D:BackupMyDatabase_Log.bak’;

    可以看到,上述日志备份形成了如图13.2所示的备份集。

Ø  要将数据库恢复到第3次日志备份时的状态,就应该依次用备份集1、备份集2、备份集3和备份集4来恢复数据库,而不是只用备份集1和备份集4,这与差异数据库恢复不同。代码如下:

第13章  数据库备份与恢复

•    13.1 备份和恢复

•    13.2 完整数据库备份与恢复

•    13.3差异数据库备份与恢复

•    13.4 事务日志备份与恢复

•    13.5 一种备份案例

Ø  对于一个投入运行的数据库系统,备份是一项重要的工作。数据备份时需要占用机器资源,占用CPU时间,因而会降低系统的运行效率,同时备份的数据会占用磁盘空间。因此,如果备份频率过高,则会影响系统的正常运行效率,会耗费大量的空间资源;如果备份频率太低,则丢失数据的风险就比较大。如何设计一个有效的备份计划,不是一件容易的事情。一般来说,实时性强的重要数据,如银行数据等,一般需要较高的备份频率;如果历史性数据,如交易数据,则备份的频率比较低,甚至不需要备份。

Ø  对于一个需要备份的数据库系统而言,有些备份操作是带有共性规律的,可为制定系统备份计划提供参考。比如,完整数据库备份的频率应该是最低,而且大多选择在节假日、周末、凌晨进行,因为这时系统处于空闲状态的几率比较高。其次是差异数据库备份,它备份的数据量较完整数据库备份少得多,因此频率可以高一些。频率最高的是日志备份,它记录的是用户对数据进行操作的信息,因而其执行时间和耗费的存储空间都相对少一些。

Ø  从实现定期备份的技术层面看,我们需要借助一种机制和方法来定期执行我们的备份代码。在SQL Server 2014中,SQL Server代理可提供这样的一种机制,它可以定期执行SQL代码或存储过程,其最小执行时间间隔是1小时,或者可以指定每天在某一个时间点上执行。下面通过一个例子来说明如何定期对数据库系统进行备份。

【例13.8】制定一个备份程序,使得它可以定期地对MyDatabase数据库进行备份。备份的具体要求是:(1)每个季度第一个周六的凌晨3:30做一次完整数据库备份;(2)每天凌晨3:30做一次日志备份。

–      先对这个备份要求做一个简要的分析。SQL Server代理可以每天在某一个时间点上执行SQL命令,因此我们可以将备份程序做成一个存储过程,在每天凌晨3:30执行一次该存储过程。在存储过程中,用代码对是否为“每个季度第一个周六”进行判断,根据判断结果来决定是执行完整数据库备份还是差异数据库备份。相关步骤如下:

(1)创建名为pro_for_backup的存储过程,其创建代码及说明如下:

CREATE PROCEDURE pro_for_backup           -- 定义存储过程pro_for_backup  

AS

BEGIN

     ALTER DATABASE MyDatabase SET RECOVERY FULL;         -- 切换到完整模式下

     DECLARE @date SMALLDATETIME, @n int, @m int, @dws nvarchar(10);

     DECLARE @s1 nvarchar(100), @s2 nvarchar(100);

     DECLARE @fg int;

    SET @date = GETDATE();            -- 获取当前日期、时间

    --下面语句获取当前时间在当前月中的第几周

    SET @n = DATEPART(WEEK,@date)-DATEPART(WEEK,@date-DAY(@date)+1)+1;

    SET @m =DateName(mm, @date);      -- 提取月份

    SET @dws = DateName(dw, @date);        -- 提取当前星期(星期几)

    SET @s1 = '创建完整数据库备份,时间:'+CONVERT(varchar(30), @date, 114);

    SET @s2 = '创建日志备份,时间:'+CONVERT(varchar(30), @date, 114);

                   SET @fg = 0;

    IF @m=1 or @m=4 or @m=7 or @m=10   -- 每个季度的第一个月

    BEGIN

        IF @n=1 and @dws=‘星期六’                       -- 如果现在是当前月份中第一周星期六,则创                                  建完整数据库备份

             BACKUP DATABASE MyDatabase TO DISK = 'D:BackupMyDatabase_Log.bak’

                  WITH DESCRIPTION = @s1, FORMAT;    -- 会覆盖备份集中以前的备份数据

             SET @fg = 1;

    END

    IF @fg = 0        -- 如果没有做上述的完全数据库备份,则做日志备份

          BACKUP LOG MyDatabase TO DISK = 'D:BackupMyDatabase_Log.bak’

                WITH DESCRIPTION = @s2;

END

(2)打开SSMS,在“对象资源管理器”中展开“SQL Server代理”节点(如果SQL Server代理没有启动,则先启动),右击其“作业”节点,在弹出的菜单中选择“新建作业…”选项,然后打开“新建作业”对话框,如图13.3所示。

 (3)在对话框的左边选择“常规”项,然后在右边的“名称”文本框输入作业的名称(自己拟定),如“定期备份数据库”,在“说明”文本框输入必要的说明文字,如“每个季度第一个周六的凌晨3:30做一次完整数据库备份,每天凌晨3:30做一次日志备份”。

(4)在图13.3所示的对话框的左边选择“步骤”项,然后在打开的界面中点击左下方的“新建”按钮,进而打开“新建作业步骤”对话框。在此对话框中,输入步骤的名称,本例输入“定期备份数据库步骤”,类型选择“Transact-SQL脚本(T-SQL)”,数据库选择“MyDatabase”,在“命令”文本框中输入要执行的SQL命令,本例要执行的是存储过程pro_for_backup,因此输入“EXEC pro_for_backup”,结果如图13.4所示。设置完后,点击“确定”按钮。

(5)在图13.3所示的对话框的左边选择“计划”项,然后在打开的界面中点击左下方的“新建”按钮,进而打开“作业计划属性”对话框。在此对话框中,输入计划的名称,如“定期备份数据库计划”,“计划类型”一栏选择“重复执行”一项,执行频率选择“每天”,执行间隔选择最小值——1天,“每天频率”选择“执行一次”,时间设置为3:30。设置结果如图13.5所示。然后单击“确定”按钮。

(6)返回“新建作业”对话框后,点击“确定”按钮即可。

    至此,备份程序的编写及设置全部完成。此后,该备份程序会按照既定的要求对数据库MyDatabase定期进行完全数据库备份和日志备份。

193.数据库备份和恢复