18143453325 在线咨询 在线咨询
18143453325 在线咨询
所在位置: 首页 > 营销资讯 > 信息时代 > 基于日志的恢复(数据库)

基于日志的恢复(数据库)

时间:2022-12-29 10:30:01 | 来源:信息时代

时间:2022-12-29 10:30:01 来源:信息时代

    基于日志的恢复 : 基于日志对故障进行恢复的机制和过程。在发生系统故障的时候,需要根据日志信息,将那些尚没有提交的事务对数据库的影响进行清除,将那些已经完成的事务进行重做。
日志(log)是指数据库事务对数据库操作历史的记录,以便在需要的时候对数据库状态进行重现。日志是日志记录的序列,有两种日志记录的表示方法:
(1) 以数据记录为单位的日志文件。记录的内容包括: ①事务开始的标记; ②事务结束的标记;③操作记录,包括事务标识、操作类型、操作对象ID、更新前的数据旧值(称为前影像before image,BI)、更新后的数据新值(称为后影像after image,AI)等项目。对于插入操作,其BI为空值。
(2) 以数据块为单位的日志文件。记录的内容包括: ①事务开始的标记; ②事务结束的标记; ③操作记录,包括事务标识、被更新的数据块的信息等。为了从系统故障或者磁盘故障中恢复时能够使用日志,日志必须存放在非易失性存储器上,而且需要保证这些日志信息是在写数据库之前已写入非易失性存储器的(比如磁盘)。
有了日志文件,恢复子系统就可以撤销故障事务已经对数据库进行的修改。具体过程描述如下:
(1)反向扫描日志文件,即从文件的尾部开始扫描日志文件,如果是在事务结束标志前遇到的更新操作,肯定是一个故障事务的操作,就需要进行恢复。否则,跳过去。
(2)对该操作执行撤销操作(也称UNDO操作),即用该操作的BI重新写入数据库。如果是插入操作,相当于执行一个删除操作,如果是删除操作,相当于执行一个插入操作,如果是更新操作,相当于用BI替代当前的值。
(3)继续反向扫描过程,查找该事务的其他更新操作,直到遇到该事务的开始标志,该事务恢复完成。
为了保证数据库是可恢复的,写日志文件必须遵循以下先写日志协议(write-ahead logging protocol):
(1)先写日志再写数据库。由于写数据库和写日志是两个不同的操作,有可能在这两个操作之间发生故障。如果先写数据库再写日志,那么,在写完数据库之后写日志之前发生的故障,就没有办法恢复,因为日志里根本就没有这个记录。如果先写日志再写数据库,按照日志文件恢复时只不过是多执行一次不必要的UNDO操作,并不会影响到数据库的正确性。
(2) 日志记录的操作顺序要和实际执行的操作顺序一致。这是因为,不同的执行顺序,产生的结果是不一样的。
先写日志协议能够确保写入数据库的数据一定是提交的事务的结果。但是,在实际系统中,为了系统的效率,常常采用延迟写的技术,也就是将应该写入数据库的数据暂存在缓冲区中,在适当的时机再写到磁盘上去。这样就有可能在系统瘫痪的时候,数据库丢失了某些已经提交的事务的执行结果。为此,在利用日志进行恢复时,恢复子系统需要扫描日志文件,确定哪些事务需要重做,哪些事务需要撤销。如果日志文件较大,这样的扫描将消耗大量的时间。更为严重的是,如果日志较大(意味着经历的时间较长),很多重做操作(也称REDO操作)其实是不需要做的,因为它们实际上已经将更新结果写到数据库中了。为了解决这个问题,提出了检查点技术(checkpoint)。检查点就是一个时刻,恢复子系统在这个时刻强制地刷新数据缓冲区和日志缓冲区。这样,当一个事务是在检查点之前提交的,那么它对数据库的修改一定已经写回数据库了。这样,在进行系统故障恢复或者介质故障恢复的时候就没有必要做REDO操作了,这大大改善了恢复的效率。
具体技术描述如下:
(1)在原来的日志文件中增加一个新的记录类型—检查点记录,另外增加一个“重新开始文件”。检查点记录记载了建立检查点时刻全部活跃事务的清单,包括事务的标识和该事务最近一个日志记录的地址。重新开始文件用来记录各个检查点记录在日志文件中的地址。
(2)恢复子系统根据预先设定的原则(例如,每一小时或者日志文件写满一半的时候)设立检查点。执行以下操作: ①刷新日志缓冲区; ②在日志文件中写检查点记录; ③刷新数据缓冲区; ④写重新开始文件,记录检查点记录在日志文件中的位置。
(3)恢复子系统根据不同情况采用不同的恢复策略: ①在检查点之前提交的事务。由于这些事务对数据库的修改已经被检查点强制写回到数据库中去了,所以不必执行REDO操作。②在检查点之后故障之前提交的事务。它们对数据库所做的修改可能还在缓冲区中,所以要执行REDO。③在故障时还没有完成的事务,应执行UNDO操作。
恢复子系统首先从重新开始文件中找到最后一个检查点记录地址,由该地址在日志文件中找到检查点记录。其次,由该检查点记录得到检查点建立时刻所有的活跃事务的清单(ACTIVE-LIST)。然后,从检查点开始正向扫描日志文件,如果有新开始的事务,就将该事务的标识也放进ACTIVE-LIST。如果有提交的事务,就将这个事务的标识从ACTIVE-LIST移到另一个REDO-LIST队列,直到遇到日志文件末尾。这个ACTIVE-LIST就是UNDO-LIST。最后,对REDO-LIST中的每个事务执行REDO操作,对UNDO-LIST中的每一个事务执行UNDO操作。
由此可见,检查点技术通过强制刷新数据缓冲区和日志缓冲区,建立一个“准一致”的数据库状态,避免了从日志文件开始进行恢复的问题,改善了恢复的效率。

关键词:数据,恢复,日志

74
73
25
news

版权所有© 亿企邦 1997-2022 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭