数据库的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日志
J.空闲时间将redo中的数据刷到对应的实际存储

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

一个oracle实例中只有一个LGWR后台进程。该进程负责写入redo日志
写入真实数据实际上通过DBWR这个后台进程,将内存中的【脏数据块】直接刷回磁盘。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值