回滚的研究

update t set id=1 where id=2


1.想更新ID=2的记录首先需要查到ID=2的 记录,检查ID=1是否在数据缓存区里,不存在则从磁盘中读取到数据缓存区中,这一点和普通到查询语句类似。

2.在回滚表空间到相应回滚段事务表上分配事务槽,从而在回滚表空间分配到空间,该动作需要记录日志写进日志缓存区。

3.在数据缓存区中创建ID=2的前镜像,前镜像数据也会写进磁盘的数据文件里(回滚表空间的数据文件),从缓存写进磁盘由ckpt决定,这些动作都会记录日志,并将其写进日志缓存区,lgwr将日志缓存区的数据写进日志文件形成redo文件

4.前面步骤做好了,才允许将ID=2的记录修改为ID=1,这个显然也是要记录到日志缓存区到

5.此时用户如果执行了提交,日志缓存区立即要记录这个提交到信息,然后就把回滚段事务标记为非激活inactive状态,表示允许重写。

6.如果执行了回滚,oracle需要从回滚段中将前镜像ID=2到数据读出来,修改数据缓存区,完成回滚。这个过程依然要产生日志,要写进 日志缓存区。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值