redo logging机制的基本原理是: 进行数据恢复时,对Incompleted Transaction不做处理;而对Committed Transaction,把记录了的数据改动再重现做一遍。
记录log
引用
Start Transaction T
…
记录:X被修改后的值是A
记录:Y被修改后的值是B
记录:X被修改后的值是C
…
Commit Transaction T
根据log恢复
1. 从上往下扫log文件
2. 遇到Commit Transaction时,依次…, 将X的值改回为A, Y的值的改会为B, X的值改为C…
可靠性如何保证?
Redo logging要求一个transaction的所有log entry都已经写入disk了,才能把数据改动写入disk. 进行数据恢复时,根据这个规则, 对于Incomplete Transaction我们可以断定数据改动还没写入disk, 所以可以直接忽略; 而对于Commited Transaction, 数据改动可能已经写入disk,也可能未写入, 这时只须根据log把数据改动做一遍,可能白做,但绝对无害。
Redo Logging的缺点
在把一个transaction的所有log entry flush to disk之前,还不能flush数据改动; 也就是说,要有足够大的buffer, 容纳这些数据改动,直到transaction结束. 所以,redo logging可能比较占用内存。