发布时间:2023-09-17 11:00
系统故障是指造成系统停止运转的任何事件,使得系统重新启动。发生系统故障时,一些未完成的事务的结果可能已经送入物理数据库,从而造成数据库处于不正确的状态,为了保证数据一致性,需要清除这些事务对数据库的所有修改。
恢复子系统必须在系统重新启动的时候让所有非正常终止的事务回滚,强行撤销所有未完成的事务。
另一方面,发生系统故障时,有些已完成的事务可能一部分甚至全部在缓冲区,尚未写回磁盘上的物理数据库,系统故障使得这些事务对数据库的修改部分或全部丢失,这也会使数据库处于不一致状态,因此应将这些事务已提交的结果重新写入数据库。所以恢复子系统还需要重做所有已提交的事务。
(1)正向扫描日志文件,找出在故障发生前已经提交的事务(这些事务既有begin-transaction记录,也有commit记录),将其事务标识计入重做队列。同时找出故障发生时尚未完成的事务(这些事务只有transaction记录,无相应的commit记录),将其事务标识计入撤销队列
(2)对撤销队列中的各个事务进行撤销处理。(反向扫描,对每个撤销事务的更新操作执行逆操作,即将日志记录中“更新前的值”写入数据库)
(3)对重做队列中的各个事务进行重做处理(正向扫描)