1)Undo 日志记录某数据被修改前的值,可以用来在事务失败时进行rollback
2)Redo 日志记录某数据块被修改后的值,可以用来恢复未写入data file的已成功事务更新的数据
3)Undo/Redo日志 两者结合
例:某一事务的事务序号为T1,其对数据X进行修改,设X的原值是5,修改后的值为15,
Undo日志为<T1, X, 5>,Redo日志为<T1, X, 15>,Undo/Redo日志为<T1, X, 5, 15>。
4)checkpoint是为了定期将db buffer的内容刷新到data file。当遇到内存不足、db buffer已满等情况时,需要将db buffer中的内容/部分内容(特别是脏数据)转储到data file中。在转储时,会记录checkpoint发生的”时刻“。在故障回复时候,只需要redo/undo最近的一次checkpoint之后的操作
幂等性:在日志文件中的操作记录应该具有幂等性。幂等性,就是说同一个操作执行多次和执行一次,结果是一样的。
日志文件在故障恢复中,可能会回放多次,如果操作记录不满足幂等性,会造成数据错误。