数据库的REDO和UNDO机制

UNDO和REDO机制

redo undo机制是在数据库引擎曾实现的。

undo机制

UNDO机制如下:
假设有A、B两个数据,值分别为1,2。
A.事务开始.
B.记录A=1到undo log.
C.修改A=3.
D.记录B=2到undo log.
E.修改B=4.
F.将undo log写到磁盘。
G.将数据写到磁盘。
H.从磁盘文件中删除之前的undo记录(事务提交)
核心在于先写undo到磁盘,再写数据。
这样,如果系统在GH之间崩溃,重启系统只需要按照undo重写即可。这个机制保证了事务的原子性,缺点在于每次日志提交都要更新undo日志,存在大量的磁盘IO。

redo机制

引入了redo+undo的机制。
A.事务开始.
B.记录A=1到undo log.
C.修改A=3.
D.记录A=3到redo log.
E.记录B=2到undo log.
F.修改B=4.
G.记录B=4到redo log.
H.将redo log写入磁盘(事务提交)
I.放弃该事务的undo日志

在事务提交前任何过程中任何时刻决定回滚,先吧undo写入磁盘,再把redo写入磁盘。之所以不采用放弃redo日志的方法,是因为redo日志为了提高效率,设计为只能追加。
这样,系统崩溃后,只需要先运行redo log,后运行undo log就可以。

猜你喜欢

转载自blog.csdn.net/define_us/article/details/84139912