常用技术是数据转储和登记日志文件
1. 数据转储
转储即数据库管理员定期的将整个数据库复制到磁带,磁盘及其他存储介质上保存起来的过程。这些备用数据称为后备副本,当数据库遭到破坏后将后备腐败重新装入,但这样只能恢复到转储是的状态,要想恢复到故障发生时的状态,必须重新运行转储之后所有更新事务。
转储时十分耗费时间和资源的,不能频繁进行
转储分为动态转储和静态转储
- 静态转储
在系统中无运行时进行转储操作,这样得到的一定是一个数据一致性的副本 - 动态转储
转储期间允许对数据库进行修改,,但是不能保证一致性,,所以要把转储期间事务对数据的修改记录下来,建立日志文件,这样后备副本+日志文件就可以恢复到某一时刻的正确状态。
2. 登记日志文件
日志文件是用来记录事务对数据库的更新操作的。
日志文件需要记录的内容:各个事务的开始标记(BEGIN),结束标记(COMMIT或ROLLBACK),所有更新操作。这三者构成一个日志记录。
每个日志记录的内容主要包括:事务标识(哪个事务),操作类型(插入,删除活修改),操作对象,旧值(对于插入,此项是空值),新值(对于删除,也为空值)
登记日志文件的原则:
- 登记的次序严格按照并发事务执行的时间次序
- 必须先写日志文件后写数据库
2.1 恢复策略
先介绍一下REDO和UNDO
REDO(重做):将已提交的但未写入磁盘的事务执行的操作重做一遍
UNDO(撤销):将已经修改数据库但未提交的事务回滚,撤销对数据库的修改
事务故障的恢复
利用日志文件进行UNDO,步骤:
(1) 反向扫描日志文件,查找该事务的更新操作
(2)对这些操作执行逆操作,即将更新前的旧值写入数据库,如果是插入则做删除,如果是删除则做插入
(3)继续扫描,查找其他更新操作并做(2)
(4)直至读到开始标记,事务故障恢复就完成了
系统故障恢复
步骤:
(1)正向扫描日志文件,找出已经提交的事务(即有BRGIN也有COMMIT记录),将其标识记入重做队列,同时找出未提交的事务(只有BEGIN,没有CONNIT)将其标识记入撤销队列
(2)对撤销队列中的各个事务进行撤销处理,步骤:反向扫描日志文件,对每个撤销事务的更新操作执行逆操作
(3)对重做队列中的每个事务进行重做处理,步骤:正向扫描日志文件,重新执行每个重做事务在日志文件登记的操作
介质故障恢复
如磁盘上的物理数据和日志文件被破坏,恢复方法是重装数据库,然后重做已完成的事务
步骤:
(1) 装入最新的数据库后备副本
(2) 装入相应的日志文件副本,然后重做已提交的事务