一、Oracle 9i起,有两种undo管理方式:
AUM Automatic Undo Management
MUN Manual Undo Management
建议使用 AUM ,下面只讨论AUM
undo segment 也叫 rollback segment
二、undo 的三大作用:
1、提供一致性读 Consistent Read
2、回滚事务 Rollback Transaction
3、实例恢复 Instance Recovery
三、配置 AUM
1、设置初始化参数 undo_management
auto AUM 管理undo
manual MUN 管理undo
SQL>show parameter undo_management
2、undo segment 即会扩展,也会收缩。收缩有SMON完成,没隔12小时会收缩一次。
3、参数 undo_retention 单位为秒,表示当事务提交或回滚,该事务所使用的undo块里的数据需要保留多长的时间。
4、当使用 AUM,并设置undo_retention 之后,undo块存在四种状态。
Actice undo的事务还没有提交。
Inactive undo上没有活动的事务,可以被其他事务覆盖。
Expried undo持续的时间超过undo_retention所指定的时间。
Freed undo内容是空,没有被使用过。
4、undo_retention默认值是 900 秒。
SQL>alter tablespace undonew add datafile 'u01/app/oracle/oradata/ora10g/undonew02.dbf' size 10M autoextend on;
四、切换undo_tablespace
1、数据库可以有多个undo表空间,但某时刻只能使用一个。
2、将undo_tablespace参数设置为另外一个undo表空间的名字,叫做undo表空间的切换。
3、切换时,有事务未完成,切换后,旧的undo表空间为 pending offline 状态,不能被删除,当事务提交后,变为offline状态,才可以删除。
4、如果undo表空间不能扩展,在不够情况下,会将保留时间小于 undo_retention 的undo数据覆盖。但可以通过设置参数保留,出现该情况直接报错
SQL>alter tablespace undonew add datafile 'u01/app/oracle/oradata/ora10g/undonew02.dbf' size 10M autoextend on maxsize 100M retention guarantee;
SQL>alter tablespace undonew retention guarantee;
SQL>alter tablespace undonew retention noguarantee;
五、计算undo表空间大小
1、利用视图 v$undostat
oracle 每隔 10分钟更新视图,将10分钟产生的undo个数记录在该视图,保留7天的数据,总共 1008行记录。
2、公式:
undospace = undo retention * undo per second * overhead(24 undo blocks)
其中: undo retention 参数 undo_retention
undo per second 通过查询 v$undostat 来计算。