本篇内容介绍了“怎么理解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回滚与撤销”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。