回滚与撤销(一)

  • Oracle性能优化中,有一个性能指标为平均事务回滚率(Rollback per Transaction),用来衡量数据库的提交与回滚率,计算公式为:

    Round(User rollbacks /(user commit + user rollbacks),4) X 100%

    这个指标应该接近于0,如果指标过高说明数据库的回滚过多

  • 关于回滚段存储的内容

    Insert 操作:回滚段只需要记录插入记录的rowid,如果回退,只需要将该记录根据rowid删除即可

    Update操作:回滚段只需要记录被更新字段的旧值即可(前镜像),回退时通过旧值覆盖新值即可完成回滚

    Delete操作:Oracle则必需记录整条记录,在回滚时,Oracle通过一个反射操作恢复删除的数据

  • 通过以上信息可以得出结论,insert 产生的undo信息最少,update居中,delete产生的undo最多。当一个大的delete操作失败或者回滚时,总需要很长的时间,并且会有大量的Redo产生,所以通常在进行大规模数据删除时,推荐通过分批删除分批提交,以减少对回滚段的占用和冲击

  • 回滚段的作用:事物回滚、事物恢复、一致性读

  • Oracle通过锁的机制实现并发控制,通过多版本模型来进行并发数据访问。通过多版本架构,Oracle实现了读取和写入的分离,使得写不阻塞读,读不阻塞修改。多版本模型在Oracle是通过一致性读来实现的

  • Oracle不允许读取未提交的数据,并且保证读取的数据来自同一时间点

  • 从Oracle 9I开始引入自动UNDO表空间管理,相关的参数有 undo_management 定义数据库使用的回滚段是否使用自动管理模式,有auto和manual  2 个值,undo_tablespace 定义在自动管理模式下,使用哪个undo表空间,undo_retention定义当回滚段变得非激活(INACTIVE)之后,回滚段中的数据在被覆盖前保留的时间,单位为秒

  • 缺省Oracle初始化10个回滚段,从v$rollname视图中可以查看出自动 创建的回滚段情况

  • 默认undo_retetion参数并不一定可以保存所设置时间内的镜前像,如果不希望被覆盖,那么需要设置undo表空间的属性为guarantee,命令如下:

    alter tablespace undotbs1 retention gurarantee;

  • Oracle 10g推出 In Memory Undo ,数据库在共享池中分配空间用于存储undo信息,它与pvrs紧密相关。

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

转载于:http://blog.itpub.net/2317695/viewspace-2214442/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值