数据库系统概论——第10章 数据库恢复技术
事务
事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不作,是一个不可分割的工作单位。
事务的特性
原子性、 一致性、隔离性、 持续性
事务是恢复和并发控制的基本单位。
四大类故障:
事务内部的故障、系统故障、介质故障、计算机病毒
恢复机制涉及的两个关键问题:
第一,如何建立冗余数据;
第二,如何利用这些冗余数据实施数据库恢复。
建立冗余数据值常用的技术是:
数据转储和登录日志文件。
数据转储分类
静态转储:
在系统中无运行事务是进行的转储操作。简单,但会降低数据库的可用性。
动态转储:
转储期间允许对数据库进行存取或修改。即转储和用户事务可以并发执行。
优点:
不用等待正在运行的用户事务结束,不会影响新事务的运行。
缺点:
不能保证副本中的数据正确有效。
海量转储:
每次转储全部数据库。
增量转储:
每次只转储上一次转储后更新过的数据。
日志文件:
用来记录事务对数据库的更新操作的文件。
登记日志文件时必须遵循的两条原则:
(1)登记的次序严格按并发事务执行的时间次序。
(2)必须先写日志文件,在写数据库。
事务故障的回复(由系统自动完成)
步骤:
(1)反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。
(2)对该事务的更新操作执行逆操作。即将日志记录中“更新前的值”(Befor Image, BI)写入数据库。
插入操作, “更新前的值”为空,则相当于做删除操作
删除操作,“更新后的值”为空,则相当于做插入操作
若是修改操作,则用BI(Before Image) 代替 AI(After Image)
(3) 继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。
(4)如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了。
系统故障的回复(由系统在重新启动时自动完成)
步骤:
(1)正向扫描日志文件(即从头扫描日志文件)
Redo队列: 在故障发生前已经提交的事务 T1, T3, T8……
Undo队列:故障发生时尚未完成的事务 T2, T4, T5, T6, T7, T9 ……
(2)对Undo队列事务进行UNDO处理。反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作。
T2, T4, T5, T6, T7, T9 ……
(3)对Redo队列事务进行REDO处理。正向扫描日志文件,对每个REDO事务重新执行登记的操作。
T1, T3, T8……
介质故障的回复
步骤:
(1)装入最新的后备数据库副本,使数据库恢复到最近一次转储时的一致性状态。(对于静态转储的数据库副本,装入后数据库即处于一致性状态。对于动态转储的数据库副本,还须同时装入转储时刻的日志文件副本,利用与恢复系统故障相同的方法(即REDO+UNDO),才能将数据库恢复到一致性状态。)
(2)装入有关的日志文件副本,重做已完成的事务。
首先扫描日志文件,找出故障发生时已提交的事务的标识,将其记入重做队列。然后正向扫描日志文件,对重做队列中的所有事务进行重做处理。即将日志记录中“更新后的值”写入数据库。