要使数据库在发生故障后能够恢复,必须建立冗余数据,在故障发生后利用这些冗余数据实施数据库恢复。
建立冗余数据常用的技术是数据转储和建立日志文件。
在一个数据库系统中,这两种方法一般是同时被采用的。
1.故障恢复的两个操作
有了数据转储和日志文件,就可以在系统发生故障时进行恢复。
故障恢复有撤销事务(UNDO)和重做事务(REDO)两个操作。
说明 | 过程 | ||
1 | 撤销事务(UNDO) | 撤销未完成的事务,使数据库恢复到事务执行前的正确状态。 | 反向扫描未完成的事务日志(由后向前扫描) Update->新值变回旧值 Insert->DeleteDelete->Insert |
2 | 重做事务(REDO) | 将已经提交的事务重新执行 | 从事务开始标识起,正向扫描日志文件,重新执行日志文件记录的该事务所有操作,直至事务结束标识。 |
2-故障恢复策略
类型 | 说明 | 策略 | |
1 | 事务故障恢复 | 事务在运行至正常终止点(COMMIT或ROLLBACK)前终止,日志文件只有该事务的开始标识而没有结束标识。 UNDO操作使数据库恢复到该事务执行前的正确状态(对事务更新操作执行逆操作) | 撤销(UNDO)事务 由系统自动完成,对用户透明 |
2 | 系统故障恢复 | 系统故障会使数据库的数据不一致 (1)未完成的事务的更新可能已入库 (2)已提交的事务更新可能还在缓冲区未入库 | 撤销未完成事务,重做(REDO)已提交事务 系统重启后自动恢复 |
3 | 介质故障恢复 | 数据库遭到破坏,需要重装数据库 装载故障前最近一次的备份和日志文件副本,再按照系统故障的恢复过程执行撤销和重做。 | 系统管理员(DBA)先介入,装入数据库副本和日志文件副本, 再由系统执行撤销和重做操作。 |