引言:undo 是Oracle数据库的重要组件,刚入门的朋友建议要把undo的原理和机制理解明白,尤其是和redo组件的区别和联系。了解undo就相当于对oracle恢复有了一半的理解。下面我们开始学习Oracle undo需要掌握什么!
一 大话UNDO
Hi 大家好,我是Oracle 的无敌小安[中文名(small undo[英文名),首先我先来介绍一下自己吧,我诞生于一个大家庭Oracle,现在的一把手拉里.埃里森就是我的缔造者,我的诞生可谓Oracle立下了汗马功劳,使Oracle开拓缰野攻城略地!我的诞生是为了解决三个大问题,事物回滚,实例恢复,查询一致性。这样的功能使Oracle成为了关系型数据库中的佼佼者。
例如:读不会被写所阻塞,当我们读取的数据块正好被他人修改时,我们就可以找到undo段里保存的前映像来维护一致性。而其他数据库,sql server mysql等都没有undo段,也就是说它们查询时可能被阻塞。
Undo和Redo区别
好多人尤其是刚刚入门的朋友,总会把这两个概念搞混淆。
Redo:是基于安全考虑的,会记录数据库的所有变化,当数据被误修改时,使用redo可重新生成,事物重做。是前滚,就是从无到有的新创建。一个新生命的诞生。
Undo:是基于回滚的,当数据被误修改时,可以从修改的新状态回退到老状态,实现事物回滚,相当于撤销操作。是回滚,就像倒录音带一样,把走过的路反向在走一遍回到原点。
Undo目的:1.事物回滚:rollback
2.实例的恢复:掉电,死机,强制关库,把没有提交的事物全部回滚
3.查询一致性:读不会被写所阻塞
Undo段:采用LRU最近最少使用算法来循环覆盖使用,它的块有active和inactive和new状态,如果块的状态为inactive那么后续的数据就可以覆盖它了。如果空间不够Oracle自动分配新空间。
分配:Oracle是按顺序循环使用的,不允许跨区覆盖。
回收:Oracle也是按顺序回收的,不允许跨区回收。
Rollback和Commit标识位都一样,都代表事物的结束
Rollback:表示会回滚从上一次提交到现在的所有事物