有两种不同的方法可以将数据库回滚到以前的状态:“回滚日志(undo)”和“预写日志(WAL)”。
回滚日志:
- 复制原始数据库内容并将其保存在单独的文件(即回滚日志)中,然后将新值写入数据库。
- 事务提交后,则删除回滚日志。
- 如果事务中止,则将回滚日志中的内容复制回数据库。
预写日志:
- 更改将附加到预写日志文件中。
- 提交时,会在WAL上设置“提交”标志(原始数据库此时可能不会更改)。
- 在WAL的检查点执行之前,可能会有多个已经提交的事务,但并未写入数据库物理文件。
这样看来,预定日志的目的还不完全是为了回滚。