1
数据库备份与恢复
? 数据库备份和恢复的基本概念
? 使用企业管理器管理备份和恢复
? 使用 T-SQL语句管理备份和恢复
? 恢复系统数据库
2
基本概念
? 备份和恢复组件是 SQL Server 的重要组成部分 。
备份就是指对 SQL Server 数据库或事务日志进
行拷贝 。 数据库备份记录了在进行备份这一操作
时数据库中所有数据的状态 。 如果数据库因意外
而损坏, 这些备份文件将在数据库恢复时被用来
恢复数据库 。 由于 SQL Server 支持在线备份,
所以通常情况下, 可一边进行备份一边进行其它
操作 。 但是在备份过程中不允许执行以下操作,
? 创建或删除数据库文件
? 创建索引
? 执行非日志操作
? 自动或手工缩小数据库或数据库文件大小
3
备份设备
? 在进行备份以前首先必须指定或创建备份设
备, 备份设备是用来存储数据库, 事务日志或文
件和文件组备份的存储介质, 备份设备可以是硬
盘, 磁带或管道 。 当使用磁盘时, SQL Server允
许将本地主机硬盘和远程主机上的硬盘作为备份
设备, 备份设备在硬盘中是以文件的方式存储的 。
4
物理设备和逻辑设备
? SQL Server使用物理设备或逻辑设备名称标识
备份设备。
? 物理备份设备是操作系统用来标识备份设备的
名称。如 c:\backups\accounting\full.bak。
? 逻辑备份设备是用来标识物理备份设备的别名
或公用名称。逻辑设备名称永久地存储在 SQL
Server内地系统表中。优点是:引用它比引用
物理设备名称简单。例:上例的逻辑设备名称
可以是,accounting_backup。
? 执行数据库的备份和恢复中,既可以使用物理
设备名,又可以使用逻辑设备名。
5
? 例,backup database accounting to
accountin_backup
? 或
? Backup database accounting
? To disk = ‘c:\backups\acounting\full.bak’
6
管理备份设备
? 可以采用企业管理器,也可以采用 T-
SQL语句来实现管理。
7
用企业管理器创建备份设备
? 步骤,
? 1、打开企业管理器,展开指定的服务器。
? 2、展开“管理”节点,并在下一级节点中选择
节点“备份”。
? 3、在备份节点上单击鼠标右键,然后从弹出菜
单中选择命令“新建备份设备”,并打开“备
份设备属性-新设备”对话框。
? 4、在“备份设备属性”对话框中执行如下操作,
? 在“名称”处输入备份设备的逻辑文件名
? 在“文件名”处输入备份文件的文件名和存储
路径。
? 5、单击“确定”,即可。
8
图 1 使用企业管理器创建备份设备
9
图 2 输入备份设备属性对话框
10
使用 T-SQL创建备份设备
?在 SQL Server 中, 可 以 使 用
sp_addumpdevice语句创建备份设备, 其语法
形式如下,
?sp_addumpdevice ‘设备类型 ’,’ 设备逻辑
名 ’,’ 设备的物理名称 ’
?例,exec sp_addumpdevice ‘disk’,
‘backup_company’,
‘c:\mssql7\backup\bk_company.bak’
11
删除备份设备
?删除备份设备与创建的过程类似,只须在企业管理器
中选中要删除的备份设备,在弹出的菜单中选择删除
选项即可删除该备份设备。或者使用 sp_dropdevice语
句来删除备份设备。其语法如下,
?sp_dropdevice ‘设备的逻辑名称’,’delfile’
?其中,delfile用来指出是否要删除物理备份设备文
件。如指定 delfile,则会删除物理备份设备磁盘文件。
?例子 4-6:删除上面创建的备份设备
?sp_dropdevice ‘backup_company’ 或
?sp_dropdevice ‘backup_company’,‘ delfile’
12
SQL Server 2000四种备份方式
? ( 一)数据库备份
? ( 二)差异备份或称增量备份
? ( 三)事务日志备份
? ( 四)数据库文件和文件组备份
13
数据库备份
? 数据库备份一般实用于数据更新缓慢的数据库中,
备份将创建当备份完成时数据库内存在的数据的
副本。
? 与事务日志备份和差异数据库备份相比,数据库
备份中的每个备份使用的存储空间更多。因此,
数据库备份完成备份操作需要更多的时间,所有,
数据库备份的创建频率通常比差异数据库或事务
日志备份低。
? 还原数据库时,备份将重新创建当数据库和备份
完成时数据库中存在的所有相关文件。但是,自
从创建备份后所作的所有数据库修改都将丢失。
若要还原创建数据库备份后发生的事务,必须使
用事务日志备份或差异备份。
14
备份数据库和事务日志
? 事务日志备份是指对数据库发生的事务进行备份 。 包
括从上次进行事务日志备份, 差异备份和数据库完全
备份之后所有已经完成的事务 。
? 还原事务日志备份时,SQL Server将按照事务日志中
的记录修改数据库。当修改完成时,SQL Server已经
重新创建了与开始执行备份操作的那一刻完全相同的
数据库状态。
? 一般事务日志比数据库备份使用的资源少。因此可以
经常创建事务日志备份。
? 只有具有自上次数据库备份或差异数据库备份后的连
续事务日志备份时,使用数据库备份和事务日志备份
还原数据库才有效。若日志备份丢失或损坏,必须创
建数据库备份或差异数据库备份并再次开始备份事务
日志。
15
差异备份
? 差异备份是指将最近一次数据库备份以来
发生的数据变化备份起来 。 因此差异备份
实际上是一种增量数据库备份, 与完整数
据库备份相比, 差异备份由于备份的数据
量较小, 所以备份和恢复所用的时间较短 。
通过增加差异备份的备份次数, 可以降低
丢失数据的风险, 将数据库恢复至进行最
后一次差异备份的时刻, 但是它无法像事
务日志备份那样提供到失败点的无数据损
失备份 。
16
文件和文件组备份
? 文件或文件组备份是一种相对较完善的备份
和还原过程,通常用在具有较高可用性要求
的超大型数据库中。这种备份策略可以只还
原已损坏的文件或文件组,而不用还原数据
库的其余部分,从而加快了恢复速度。
17
数据库恢复
? 简单恢复
? 完全恢复
? 大容量日志记录恢复
18
简单恢复
? 所谓简单恢复就是指在进行数据库恢复
时, 仅使用了数据库备份或差异备份,
而不涉及事务日志备份 。 简单恢复模式
可使数据库恢复到上一次备份的状态,
但由于不使用事务日志备份来进行恢复,
所以无法将数据库恢复到失败点状态 。
当选择简单恢复模式, 时常使用的备份
策略是首先进行数据库备份, 然后进行
差异备份 。
19
完全恢复
? 完全数据库恢复模式是指通过使用数据库备份和
事务日志备份将数据库恢复到发生失败的时刻,
因此几乎不造成任何数据丢失 。 这成为对付因存
储介质损坏而数据丢失的最佳方法 。 为了保证数
据库的这种恢复能力, 所有的批数据操作, 比如
SELECT INGO,创建索引都被写入日志文件 。 选
择完全恢复模式时常使用的备份策略是,
? 首先进行完全数据库备份
? 然后进行差异数据库备份
? 最后进行事务日志的备份
? 如果准备让数据库恢复到失败时刻, 必须对数据
库失败前正处于运行状态的事务进行备份 。
20
大容量日志记录恢复
? 大容量日志恢复在性能上要优于简单恢复和完全恢复模式。
它能尽最大努力减少批操作所需要的存储空间。这些批操
作主要是 SELECT INTO, 批装载操作 ( 如 bcp 操作或批插
入操作 ),创建索引, 针对大文本或图像的操作 。 选择批
日志恢复模式所采用的备份策略与完全恢复所采用的恢复
策略基本相同 。
? 在实际应用中备份策略和恢复策略的选择不是相互孤立的
而是有着紧密的联系 。 我们并不仅仅是因为数据库备份为
数据库恢复提供了,原材料,这一事实, 以便在采用何种数
据库恢复模式的决策中考虑该怎样进行数据库备份 。 更多
是因为在选择该使用哪种备份类型时我们必须考虑到当使
用该备份进行数据库恢复时, 它能把遭到损坏的数据库带
到怎样的状态 ( 是数据库失败的时刻, 还是最近一次备份
的时刻 )。 但有一点我们必须强调, 即备份类型的选择和
恢复模式的确定都应服从于这一目标, 尽最大可能, 以最
快速度减少或消灭数据丢失 。
21
1, 使用企业管理器进行备份
?(1) 启动企业管理器,登录到指定的数据库服务
器,打开数据库文件夹,用右键单击所要进行备份
的数据库图标,在弹出的快捷菜单中选择所有任务,
再选择备份数据库 。
?( 2 ) 出现 SQL Server备份对话框, 对话框中有两
个页框, 即常规和选项页框 。
?( 3 ) 在常规页框中, 选择备份数据库的名称, 操
作的名称, 描述信息, 备份的类型, 备份的介质,
备份的执行时间 。
?( 4 ) 通过单击添加按钮选择备份设备 。
?( 5 ) 选择调度复选框, 来改变备份的时间安排 。
?( 6 ) 在选项页框中进行附加设置 。
22
2, 使用备份向导 (图 1 --图 7)
图 1 欢迎使用向导对话框
23
图 2 选择数据库对话框
24
图 3 输入备份名称和描述信息对话框
25
图 4 选择备份数据库类型对话框
26
图 5 设置备份介质类型和属性对话框
27
图 6 备份验证和调度对话框
28
图 7 确认执行备份操作对话框
29
恢复概述
? 数据库备份后,一旦系统发生崩溃或者执行
了错误的数据库操作,就可以从备份文件中
恢复数据库。数据库恢复是指将数据库备份
加载到系统中的过程。系统在恢复数据库的
过程中,自动执行安全性检查、重建数据库
结构以及完整数据库内容。
30
使用企业管理器恢复数据库
使用企业管理器恢复数据库
( 1) 打开企业管理器, 单击要登录的数据
库服务器, 然后从主菜单中选择工具,
在菜单中选择还原数据库命令 。
( 2) 在还原为数据库旁的下拉列表中选择
要恢复的数据库, 在还原组中通过单击
单选按钮来选择相应的数据库备份类型 。
( 3) 选中选项页框, 进行其它选项的设置
31
使用 Transact-SQL备份数据库
?包括如下几个方面,
?完全数据库备份
?差异数据库备份
?事务处理日志备份
?文件和文件组备份
32
执行完全数据库备份
? 可以使用新建一个备份文件,也可以使
用一个已经存在的备份设备。
? Backup database company to
disk=‘c:\sqlbackup\company.bak’
33
差异数据库备份
? 例如,backup database company to
company_backup with differential
? 注意:差异备份数据库备份必须在存在
完全数据库备份以后执行。
34
事务处理日志备份
? 语法规则如下,
? BACKUP LOG { database_name |
@database_name_var }
? TO < backup_device > [,..n ]
? 例,backup log company to
company_log _backup
例,Backup log company to
company_log_backup with no_truncate
其中,with no_truncate参数指定在完成事务日
志备份以后,并不清空原有日志的数据。
35
执行文件和文件组备份
? 语法为,
? 语法格式如下
? BACKUP DATABASE { database_name |
@database_name_var }
? < file_or_filegroup > [,..n ]
? TO < backup_device > [,..n ]
? 例,backup database company
filegroup=‘primary’ to
company_filegroupbackup_primary
36
使用 T-SQL语句恢复数据库
? 利用数据库备份执行恢复操作的语法格式,
? RESTORE DATABASE 数据库名
? [ FROM 备份设备名 [,..n ] ]
? [ WITH [[,]{nonrecovery|recovery}]
? [[,]replace] ]
? 其中,nonrecovery|recovery参数用于指定恢复
操作是否回滚所有未曾提交的事务,默认选项为
recovery。 在使用一个数据库备份和多个事务日
志进行恢复时,在恢复最后一个事务日志文件以
前都应该使用参数 nonrecovery。 参数 replace指
定恢复操作是否替换原来的数据库或数据文件和
文件组。
37
数据库备份的恢复
? RESTORE DATABASE 数据库名
? [ FROM 备份设备名 [,..n ] ]
? [ WITH [[,]{nonrecovery|recovery}]
? [[,]replace] ]
? 其中,nonrecovery|recovery参数用于指定
恢复操作是否回滚所有未曾提交的事务,默认
未 recovery。
? 参数 replace指定恢复操作是否替换为原来的
数据库或数据文件和文件组。
38
事务日志备份的恢复
? 利用事务日志备份执行恢复数据库的语
法,
? RESTORE LOG 数据库名
? [ FROM 备份设备名 [,..n ] ]
? [ WITH [[,]{nonrecovery|recovery}]
? [[,]STOPAT=date_time] ]
? 其中:参数 STOPAT=date_time用来指
定数据库恢复到一个特定的时间点。
39
文件和文件组备份的恢复
? 利用文件和文件组备份恢复数据库的语
法,
? RESTORE DATABASE 数据库名
? {FILE = 逻辑文件名 |FILEGROUP=逻辑
文件组名』
? [ FROM 备份设备名 [,..n ] ]
? [ WITH [[,]{nonrecovery|recovery}]
? [[,]replace] ]
40
? 例:从磁盘上的备份文件
d:\sqlbackup\company.bak中恢复数据库
company的一个完整数据库备份
? Restore database company from
disk=‘d:\sqlbackup\company.bak’
41
? 例,
? Restore database company from
company_backup with nonrecovery
? Restore log company from
company_laobackup1with nonrecovery
? Restore log company from company_logbackup
with recovery,
? Stopat = ‘oct 5,1999 6:0005 PM’
? 是一个数据库备份和两个事务日志的数据库的
恢复操作,使用 stopat参数将数据库恢复到一个
指定的时间点。
42
?例:从备份设备中恢复数据库:从
backup_company备份设备中恢复数据库
company。
?use master
?restore database company
?from backup_company
43
? 例:下面是一个数据库备份和两个事务日志进
行了数据库的恢复操作,并使用 stopat参数将
数据库恢复到一个指定的时间点。
? Restore database company
? From company_backup with nonrecovery
? Restore log company
? From company_logbackup1 with nonrecovery
? Resotre log company
? From company_logbackup with recovery,
? Stopat=‘oct 5,1999 6:00:05 PM’
44
? 例:下面的例如将还原一个包含两个文
件、一个文件组和一个事务日志的数据
库 company。
? Resotre database company
? File = ‘company_data_1’,
? File = ‘company_data_2’,
? Filegroup=‘employees_fg’
? From company_backup
? With norecovery
? Restore log mynwind
? From company_logbackup1