数据库工程师复习重点:备份和恢复数据库
15.1.1 概述
1、备份数据库的作用
(1) 备份数据库就是将数据库数据和与数据库的正常运行有关的信息保存起来,以备恢复数据库时使用,其主要目的是为了防止数据的丢失。
(2) 另一作用是作为数据转移的一种方式;
2、备份时间
(1) 对于系统数据库应进行了修改后立即备份,对于用户数据库一般采用定期备份;
(2) 备份数据库要选在数据库操作少的时间进行,这样可减少对备份以及数据操作性能的影响。
15.1.2 备份设备
1、 SQL Server将备份数据库的场所称为备份设备,它支持将数据库备份到磁带或磁盘上;
2、 备份方式有两种:
(1) 先创建备份设备,然后将数据库备份到备份设备上(永久备份设备);
(2) 直接将数据库备份到物理文件上(临时备份设备)。
15.1.3 创建备份设备
备份设备在操作系统一级实际上是物理文件,只是备份设备必须要先创建好,然后才能使用
1、 用企业管理器创建备份设备
2、 使用系统存储过程创建备份设备
sp_addumpdevice[@devtype=]’device_type’,[@logicalname=]’logical_name’,
[@physicalname=]’physical_name’
其中:
(1)[@devtype=]’device_type’:为备份设备的类型,可选下列之一:
(A) Disk:使用磁盘文件作为备份设备;
(B) Pipe:使用命名管道作为备份设备;
(C) Tape:使用磁带设备。
(2)[@logicalname=]’logical_name’:备份设备的逻辑名称,该逻辑名称用在BACKUP和RESTORE语句中;
(3)[@physicalname=]’physical_name’:备份设备的物理名称。
15.1.4 备份类型
1、 完全备份
是将数据库中的全部信息进行备份,它是恢复的基线,在进行完全备份时,不但备份数据库的数据文件、日志文件,而且还备份文件的存储位置信息以及数据库中的全部对象及相关信息;
备份数据库是要消耗时间的,在进行备份数据库时,用户可以访问数据库,它将不影响数据库的备份,并且还可以将备份过程中发生的活动全部备份下来。
2、差异备份
是备份从最近的完全备份之后对数据库所作的修改,它以完全备份为基点,备份变化了的数据文件和日志文件以及数据库中其他被修改的内容,
在差异备份过程中,也允许用户访问数据库和对其操作,且在备份过程中的活动也一起备份下来;
3、事务日志备份
(1) 是备份从上次备份之后的日志记录,在默认情况下,事务日志备份完成后,要截断日志。
(2) 事务日志记录了用户对数据库进行的修改操作,为了避免记录越来越多,必须定期地将日志记录中不需要的部分清除掉,这种过程叫截断日志,备份日志是截断日志的一种方法;
(3) 如果要进行事务日志备份,必须将数据库的故障还原模型设置为“完全”方式或“大容量日志记录的”方式,因为在默认情况下的“简单”方式,只能进行完全备份和差异备份,不能进行事务日志备份,因为在该模式下系统自动定期将事务日志中不活动的部分清除。
(4) 如要对数据库进行事务日志备份,则必须先设置数据库的故障还原模型,否则在恢复时就会出错。这是因为不同的还原模型对日志的记录和维护方式是不一样的。
15.1.5 备份策略
1、完全备份
完全备份策略适合于数据库数据不是很大,而且数据更改不是很频繁的情况。可以几天或几周进行一次;
2、完全备份+日志备份
如不允许丢失太多数据,且不希望经常进行完全备份;
3、完全备份+差异备份+日志备份
该策略的好处是备份和恢复的速度都比较快,出现故障时丢失的数据也比较少;
15.1.6 实现备份
1、 使用企业管理器备份数据库
2、 使用Transact-SQL语句备份数据库
(1) 备份数据库的基本语法:
BACKUP DATABASE 数据库名
TO {<备份设备名>}|{DISK|TAPE}={‘物理备份文件名’}
[WITH [DIFFERENTIAL][[,]{INIT|NOINIT}]]
其中:
(A)<备份设备名>:将数据库备份到已创建好的备份设备名上;
(B)DISK|TAPE:将数据库备份到磁盘或磁带;
(D) DIFFERENTIAL:进行差异备份;
(E) INIT:本次备份数据库将重写备份设备,即覆盖掉本设备上以前进行的所有备份;
(F) NOINIT:本次备份数据库将追加到备份设备上,即不覆盖。
(2) 备份数据库日志的基本语法:
BACKUP LOG 数据库名
TO {<备份设备名>}|{DISK|TAPE}={‘物理备份文件名’}
[WITH [{INIT|NOINIT}] [{[,]NO_LOG|TRUNCATE_ONLY|NO_TRUNCATE}]]
其中:
(A) NO_LOG和TRUNCATE_ONLY:表示备份完日志后要截断不活动的日志;
(B) NO_TRUNCATE:表示备份完日志后不截断不活动的日志;
(C) 其他选项同备份数据库语句的选项。
15.1.7 备份媒体集
1、 当数据库很大时,有时一个备份设备的空间可能不能满足要求,这里就可以将数据库备份到多个不同的备份设备上,同时使用多个备份设备进行备份的为此设备就称为备份媒体集;
2、 使用媒体集与使用单一备份设备的方法一样,只需添加其他备份设备,系统会自动将这些设备作为一个备份媒体集使用;
3、 系统在使用备份媒体集时,基本是将备份所需的空间均衡地分担到每个备份设备上;
4、 如果以后要单独使用某个设备,则必须重新初始化备份媒体集,即删除不需要的设备后,重写并初始化即可,但注意的是,重新初始化后原备份媒体集上所备份的内容将全部丢失。
15.2 恢复数据库
15.2.1 恢复前的准备及恢复顺序
1、恢复前的准备
在恢复数据库前必须限制数据库的访问,一般选择“限制访问”中的“db_owner、dbcreator或sysadmin的成员”,说明只有以上角色才可访问数据库;
2、恢复的顺序
(1) 恢复最近的完全数据库备份;
(2) 恢复完全数据库备份之后最近的差异数据库备份;
(3) 按日志备份的先后顺序恢复自最近的完全或差异数据库备份之后的所有日志。
15.2.2 实现恢复
1、用企业管理器恢复数据库
2、用Transact-SQL语句恢复数据库
RESTORE DATABASE 数据库名
FROM 备份设备名
[WITH FILE=文件号[,]NORECOVERY[,]RECOVERY]
其中:
(1) FILE=文件号:标识要还原的备份集,文件号为1表示备份设备上的第一个备份集,文件号为2表示备份设备上的第二个备份集;
(2) NORECOVERY:表明对数据库的恢复还没有完成,使用此项恢复的数据库是不可用的,但可以继续恢复后续的备份;
(3) RECOVERY:表明对数据库的恢复已完成,一般是在恢复数据库的最后一个备份时使用此项,此时恢复的数据库是可用的。
恢复日志的语法:
RESTORE LOG 数据库名 FROM 备份设备名 [WITH FILE=文件号[,]NORECOVERY[,]RECOVERY]