撤销表空间应当足够大,才能存储最坏情况下并发事务生成的所有撤销数据。在更高级的环境中,最好还应当添加允许闪回查询的空间。这个算法很简单,首先计算最高工作负荷时生成撤销的速度,然后再乘以耗时最长的查询的时间长度。
select * from V$undostat 可以得到这些数据。
我们可以通过顾问程序获得这些数据,Database Control 中的Automatic undomanagement 中会指出 撤销的封值速率/每分钟,运行最长的查询等信息。
撤销表最小空间大小应为 每分钟速率× 最长查询时间
创建UNDO表空间语句
CREATE UNDO TABLESPACE tablespace_name
DATAFILE datafile_name SIZE size
[RETENTION NOGUARANTEE| GUARANTEE ];
默认方式下,撤销表空间并不确保撤销保留,可以在创建表空间时指定特性,也可以在后期设置。
ALTER TABLESPACE tablespace_name
retention [GUARANTEE | NOGUARANTEE ];
除了自动创建的撤销段外,无法再撤销表空间中创建段。撤销表空间会自动创建10个段(前提是表空间能容纳10个段的大小)。如果并发事务超过10个,会自动创建更多个段。
每个数据库实例,可以有多个撤销表空间,但是每次都仅能使用一个。我们可以通过更改 UNDO_TABLESPACE 来更改撤销表空间。