怎么理解Oracle回滚与撤销

本篇内容介绍了“怎么理解Oracle回滚与撤销”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

  • 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紧密相关。

“怎么理解Oracle回滚与撤销”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/205244.html

(0)
上一篇 2021年11月29日
下一篇 2021年11月29日

相关推荐

发表回复

登录后才能评论