第七章,管理undo 表空间
1 undo的作用
使用undo tablespafce 存放数据缓存区读出的数据库的前镜像
undo表空间提供一下四种情况所需的信息
)1回滚事务 rollback
)2 读一致性,正在做dml操作的数据库,事务结束前,其他用户读undo里面的数据前镜像
)3 实例的恢复,instance recover (undo-rollback)
)4 闪回技术 flashback query flashback tables 等
2 undo的参数
undo的三个基本参数
show parameter undo
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 ;
查看undo 表空间
select tablespace_name,status,contents from dba_tablespaces ;
查看正在使用中的回滚段
select * from v$rollname;
切换undo 表空间
alter system set undo_tablespace=undotbs2; (动态参数) 修改立即生效
删除未激活的undo 表空间
drop tablespace undotbs1 including contents and datafiles; (删除未激活的undo)
只能使用一个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;
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 ;
缺省下,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段状态