一、数据库恢复-事务故障
系统通过对事物进行UNDO操作和REDO操作可实现故障后的数据库状态恢复
1、对于发生事务故障后的数据库恢复
- 恢复机制在不影响其他事务运行的情况下,强行回滚夭折事务,对该事务进行UNDO操作,来撤销该事务已对数据库进行的更新,使得该事务好像根本没有执行过一样,从而保持事务的原子性
- 恢复是由DBMS自动完成的 ,对用户是透明的
2、基于这里给出的一段多事务并发执行的日志示意图,记录的表示应采用约定好的表示方法。
假设事务T1在生成更新好的日志记录后发生故障,则系统进行恢复的步骤如下:
(1)首先从日志尾部开始反向向前扫描日志,即从最近写的日志记录到最早写的日志记录,查找该事物的更新操作W1
(2)然后依次对该事务的所有更新操作执行逆操作,将更新记录中对某数据项更新前的值,如Xold Yold写入数据库。若该更新操作是插入操作,更新前的值应为空,恢复时相当于做删除操作。若该更新操作是删除操作,恢复时相当于做插入操作
(3)继续反向扫描日志,直至遇到标记此事务开始的日志记录B1,恢复过程终止,并在该事务中添加该事物的异常终止记录A1
对于日志从后向前反向扫描处理可保证最后恢复的数据是事务开始时的数据。在某些DBMS中,恢复操作对数据库的更新操作也可能会产生另一种形式的日志信息记载在日志中,但这些日志信息不会再用于恢复操作
二、数据库恢复-系统故障
1、对于发生系统故障后的数据库恢复
- 恢复机制在系统重新启动时利用日志撤销(UNDO)所有非正常终止的事务已对数据库进行的更新 。保持夭折事务的原子性
- 重做(REDO)已提交事务对数据库的更新,保持提交事务的持久性,从而将数据库恢复到发生故障前的一致性状态
- 系统故障的恢复是由DBMS在系统重新启动时自动完成的,不需要用户干预
基于这里给出的一段并发事务日志示意图,假设系统在事务T1生成更新记录后崩溃