something about Undo

Undo段
对于insert操作,回滚段只需要记录插入的rowid,回退时根据rowid删除记录
对于update操作,回滚段只需要记录被更新字段的旧值即可(前镜像),回退时通过旧值覆盖新值
对于delete操作,回滚段记录整行的数据,回退时通过反向(insert)操作恢复删除数据
所以此三者操作insert将产生最少的undo,update次之,delete最多

修改记录步骤:
1,事务开始时,在回滚段上分配一个事务槽
2,在数据块头部获取一个ITL事务槽,该事务槽指向回滚段的事务槽
3,修改数居前,记录前镜像信息,并以undo record的形式记录在回滚段中,回滚段事务槽指向该记录
4,锁定修改行,修改行锁定位(lb-lock byte)指向ITL事务槽
5,进行数据修改

-------------------------------------------------

修改数据后,commit,oracle将回滚段上的事务信息标记为inactive,并释放锁信息,ITL事务信息

数据块上存储了ITL和锁定等事物信息,oracle必须在事务提交之后清楚这些事务数据,这就叫做块清除

如果修改的数据任然在Buffer Cache中,那么oracle可以立即清除ITL信息,这叫快速清楚 fast block cleanout,不过有一个限制,如果修改的块数据量超过Buffer Cache的10%,则超出不份不立即清除,而是选择延迟清楚(delayed Block Cleanout),修改的数据如果已经被写到数据文件上,oracle也会选择延迟清除,从而提高性能

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24217871/viewspace-679680/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24217871/viewspace-679680/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值