首页 理论教育恢复程序分布式数据库技术

恢复程序分布式数据库技术

【摘要】:当易失存储器丢失信息的故障发生时,恢复程序会读日志文件并执行下列操作。校验点是指周期性执行的操作,以便简化恢复程序里的第一步和第二步。校验点的存在方便了恢复程序。第一种情况容易处理,可以使用日志对所有已提交事务实施redo,即将离线存储器中的数据库状态恢复成一个镜像,然后实施redo。第二种情况则很严重,由于日志信息丢失,一般无法完全恢复到最近的数据库状态,事务的持续性受到损害,要尽量避免发生这种情况。

当易失存储器(如计算机内存)丢失信息的故障发生时,恢复程序会读日志文件并执行下列操作。

●找出那些未提交的事务以便undo。识别未提交事务的方法是,找出那些日志文件里有begin_transaction记录但没有相应的commit或abort记录的事务。从而,构造出一张undo表。

●找出那些需要redo的事务。原则上,这个集合包含所有已经在日志文件中有commit记录的事务。实际上,在故障前,它们可能已经安全地保存在稳存里了,因此无需redo。为了区别哪些事务需要redo,哪些不需要redo,可以使用校验点技术。结果构造出一张redo表。该表记录事务的特点是,虽然日志中保存有commit记录,但是没有EOT记录。

●对第一步确定的undo表里的事务执行undo操作;对第二步中确定的redo表里的事务执行redo操作。

随着数据库的启动、运行,日志的规模也越来越大。从日志头上检查整个日志,效率太低。因此,提出使用校验点技术。

校验点是指周期性执行的操作,以便简化恢复程序里的第一步和第二步。实施校验点需要执行如下操作。

●将所有的日志记录和所有的易失存储器里的数据库更新写入稳存,这样,校验点后所有事务在稳存中都有其所有的动作记录。

●将校验点记录写入稳存。日志中的校验点用于记录包含设置校验点时仍在活跃的事务信息(活跃的事务是指日志里有begin_transaction记录但没有相应的commit或abort记录)。

校验点的存在方便了恢复程序。这样上面的第一步和第二步可以修改如下。

●找到和读出最后一个校验点记录。(www.chuimin.cn)

●将校验点记录里记载的所有事务放入undo集,并将redo集置为空。

●从校验点记录开始读日志文件,如果找到一个begin_transaction记录,则将相应的事务归入undo集。如果找到一个commit记录,则将相应的事务从undo集移到redo集。

理论上讲,日志包含数据库的全部历史。但与undo与redo有关的只是最后那些事务。因此,只需最后涉及的那些事务在线就可,其他信息可以存放在离线存储器里(如磁带)。这样可以节省宝贵的在线存储开销。

目前我们讨论的故障未涉及稳存信息的丢失。但是稳存存放的信息也不是万无一失的,若稳存里的信息丢失,则要考虑以下两种情况。

●数据库信息丢失但日志是安全的故障。

●日志信息丢失的故障。

第一种情况容易处理,可以使用日志对所有已提交事务实施redo,即将离线存储器中的数据库状态恢复成一个镜像,然后实施redo。值得注意的是,恢复这个镜像耗时很长,但可以选择数据库休眠期间执行这个操作。

第二种情况则很严重,由于日志信息丢失,一般无法完全恢复到最近的数据库状态,事务的持续性受到损害,要尽量避免发生这种情况。