您的位置:首页 > 其它

第二十四讲--Undo段及区的状态和使用

2016-03-22 12:26 211 查看
Undo的作用:oracle开始一个事务的时候使用undo表空间。

假如执行一个delete语句,oracle会把删除前的数据放到undo表空间的undo段里面。一个事务修改的block越多则占用的undo段越多。

Undo的两大作用:

1.Oracle的事务有时需要回滚,回滚的作用就是把事务修改前的数据拷贝回来,所以需要修改前的数据,修改前的数据就放在undo表空间里面;

2.B会话要读数据的时候发现数据被A会话修改了,但是A会话的事务没有提交,B会话就会在buffer cache里申请一个buffer,然后把要读的数据从undo段写到buffer里,然后读buffer,这个buffer就叫做cr块。B会话通过构造cr块达到一致性读取数据的目的。保证读取的永远是已提交的数据,不会读出未提交的数据。

3.实例崩溃恢复。实例崩溃以后的恢复分为两步:1.前滚,把崩溃前的脏buffer尽量多的构造出来。2.回滚,前滚出来的脏buffer可能是未提交的事务造成的,这些脏buffer就要回滚,回滚就要用到undo表空间。

Undo段中区的状态:

1. free;

2. expired,inactive区过了undo_retention参数设定的时间就会变成expired状态;

3. inactive,区中的事务已经提交。为了保证某功能的实现,oracle希望已提交的事务所对应的undo表空间里undo段的区尽量的在保持一段时间,也就是oracle希望inactive这个区的在保持一段时间,undo_retention,900秒;

SQL> show parameter undo;

NAME                                 TYPE                                          VALUE

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

undo_management                      string                                          AUTO

undo_retention                                     integer                                                        900

undo_tablespace

4. active,表示区中的事务还没有提交,active区不能被覆盖;

对oracle实例恢复的理解:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: