首页 理论教育分布式数据库技术:日志记录和logwrite-ahead协议

分布式数据库技术:日志记录和logwrite-ahead协议

【摘要】:大家熟知的航海记录和飞机的黑匣子记录等都是日志。这里,日志记录应当包含以下几方面。当然,事务在启动、提交或夭折时,需要往日志里写入begin-transaction、commit或abort记录。数据库更新的写操作和相应的日志写操作是两个不同的操作,因此,有可能会在这两个操作执行期间发生故障。为了避免出现这种现象,我们要求先写日志记录再更新数据库,称为log write-ahead协议。该协议有两个基本规则。

网络设备、系统及服务程序等在运行时都会生成叫日志的事件记录;每行日志都记载着日期、时间、使用者及动作等相关操作的描述。大家熟知的航海记录和飞机的黑匣子记录等都是日志。

日志里包含日志记录。日志记录里记载着undo和redo动作所需要的信息。目前流行的博客(blog)也是一种日志,可以记载个人的喜怒哀乐。

数据库系统中,无论什么时候,只要事务在数据库上执行操作,就必须在日志文件里写入记录。这里,日志记录应当包含以下几方面。

●事务的标识。

●记录的标识。

●动作的类别(insert、delete、modify)。

●旧的记录值(前象),用于undo。(www.chuimin.cn)

●新的记录值(后象),用于redo。

●恢复程序需要的其他辅助信息(如指向同一事务的前一个日志记录的指针)。

当然,事务在启动、提交或夭折时,需要往日志里写入begin-transaction、commit或abort记录。

数据库更新的写操作和相应的日志写操作是两个不同的操作,因此,有可能会在这两个操作执行期间发生故障。如果数据库更新的写操作发生在写日志记录之前,那么有可能恢复程序无法undo更新。为了避免出现这种现象,我们要求先写日志记录再更新数据库,称为log write-ahead协议。该协议有两个基本规则。

●实施数据库更新操作前,稳存中至少记录了可以用于undo的日志记录。

●在提交事务前,这个事务的所有日志记录必须已经记录在稳存中。