根据undo log恢复数据

undo logging机制的基本原理是: 进行数据恢复时,对于Committed Transaction不做处理,对于Incomplete Transaction,则将相关数据写回成Transaction开始前的旧值。

记录log

引用

Start Transaction T



记录:X被修改前的值是A

记录:Y被修改前的值是B

记录:X被修改前的值是C



Commit Transaction T

根据log恢复

1. 从下往上扫log文件

2. 遇到有Start无Commit的Transaction时,依次将…, X的值改回为C, Y的值改回为B, X的值的改回为A.

可靠性如何保证?

1. Undo logging要求所有数据改动都已经写入disk了,才能将Commit Transaction这种log entry写入disk,这就保证commited transaction相关的数据改动已经真的持久化了。

2. Undo Logging还要求先在log文件中记录数据的旧值,再将数据改动持久化。当发生断电时,数据改动可能已经持久化,也可能还没有; 进行数据恢复时不必管有没有,一律把数据恢复成旧值即可,有可能是多余的,也有可能不是,总之对数据一致性是无害的。

Undo Logging的缺点

必须先将数据改动写入disk, 才能标识一个Transaction的结束; 也就是说,要完成一个Transaction, 必须将数据改动写入disk, 不能再在buffer里放着。缺点就是,数据改动可能没有累积到一定的量,就要从buffer中flush中去,所以I/O读写可能会比较频繁。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.