一、数据修改后没有commit 也没有记录redo.log
数据更新后,尚未commit设备断电。服务启动后自动加载数据进入内存,因为redo.log无数据,所以数据根据undo.log拍摄的快照回滚并重新落盘
二、数据没有commit,但是写入了redo.log
redo buffer根据参数定时写入redo.log,但实际事务并未真正提交。此时设备断电,服务启动后加载数据到内存。
- 首先根据redo.log记录变更信息修改data buffer数据 将id 1修改为2
- 在根据undo buffer信息 发现没有commit 再次将数据进行回滚 将id 2修改为1
- 最后将id=1 lsn=100 txid=100 写入磁盘
三、事务成功commit
事务成功提交,变更写入redo.log 并且undo.log记录commit
- 首先根据redo.log记录变更信息修改data buffer数据 将id 1修改为2
- undo.log有记录commit因此数据不会发生回滚
- 将id=2 lsn=101 txid=101写入磁盘