第七章,管理undo 表空间


1 undo的作用

使用undo tablespafce 存放数据缓存区读出的数据库的前镜像


oracle_第七章 管理undo 表空间_第1张图片



undo表空间提供一下四种情况所需的信息

)1回滚事务 rollback

)2 读一致性,正在做dml操作的数据库,事务结束前,其他用户读undo里面的数据前镜像

)3 实例的恢复,instance recover (undo-rollback)

)4 闪回技术 flashback query flashback tables 等


oracle_第七章 管理undo 表空间_第2张图片


2 undo的参数


undo的三个基本参数

show parameter undo

oracle_第七章 管理undo 表空间_第3张图片


undo的参数说明


undo_management = manaul时  设置成手工,只有在维护时才使用

                                = auto 时,使用undo tablespace 管理undo

undo_retention  指定保留期,希望在这个期间commit的undo数据不要覆盖

undo_tabelspace  当前使用的undo 表空间



undo 表空间可以建立多个,单只有一个是使用中的undo,使用中的undo tablespace  不能offline 和 droop



建立一个新的undo 表空间


create undo  tablespace  undotbs2 datafile '/u01/oradata/prod//undotbs02.dbf 'size 50m autoextend on  ;

图片.png


查看undo 表空间


select  tablespace_name,status,contents from dba_tablespaces ;

oracle_第七章 管理undo 表空间_第4张图片


查看正在使用中的回滚段


select * from  v$rollname;

oracle_第七章 管理undo 表空间_第5张图片


切换undo 表空间


alter system set undo_tablespace=undotbs2; (动态参数) 修改立即生效


图片.png



oracle_第七章 管理undo 表空间_第6张图片


删除未激活的undo 表空间


drop  tablespace undotbs1 including contents and datafiles;  (删除未激活的undo)


图片.png



oracle_第七章 管理undo 表空间_第7张图片

只能使用一个undo





3 undo 表空间的重用机制


undo数据中的四种状态

)1 active 表示 transaction 还没有commit 不可覆盖

)2 unexpired  由已经commit 或rollback的数据转换而来的状态,在保留期内,尽量不可覆盖

)3 expired 由unexpired 转换而来的,其中的数据是超过undo 保留期的,随时可以再分配(覆盖)

)4 free 分配了但未使用过,一般是undo最初创建和扩展时出现,它不是一个常态的


undo的状态转换体现了undo空间的循环使用原理,分配-冻结-回收 -再分配




4 关于AUM


AUM 是自动调整的undo retention 特性

目的是尽量避免两个undo 错误

ORA-30036 错误空间不足

ORA-01555 错误快照太久


11g 默认设置为自动管理表空间


select  begin_time,tuned_undoretention  from v$undostat;


oracle_第七章 管理undo 表空间_第8张图片



aum的两种工作方式


)1,autoextend off 下 , 忽略undo_retention 参数,TUNED_UNDORETENTION 参照undo表空间的大小和undo 统计信息。

确定,空间给定不合理时。产生undo 告警,不能完全避免ora-30036 和ora-01555 若undo 增加尺寸,又可能造成tuned_undoretention 增加


)2 autoextend on 下 ,参考undo_retention 作为下限值,tunet_undoretention 保留期内,以扩展空间代理覆盖unexpired 基本避免了 ora-30036,ora-01555

缺点,表空间可能过度膨胀


undo的 guarantee 属性


通常情况下,unexpired数据并不绝对保证在retention期内覆盖,必要时可以考虑设置保留期内强制不覆盖的guarantee属性,同时应该使用undo autoextend on

select tablespace_name,status contents,retention from dba_tablespaces ;

oracle_第七章 管理undo 表空间_第9张图片


缺省下,undo的 retention 是 noguarantee

undo 的retention属性是可以修改的


alter tablespace untotbs2 retention guatantee 保证在retention期间内不许覆盖

alter tablespace undotbs2 retention nogurantee



5 undo的信息查询

v$session 查看用户建立的session

v$transaction 查看当前的事务

v$rollname 查看undo段名称

v$rollstat undo段的状态

v$undostat 查看每10分钟的统计数据

dba_undo_extents 查看undo段中不同状态的空间占用

dba_rollback_segs 数据字典中记录的undo段状态