日期:2014-05-16 浏览次数:20405 次
通常情况下,如果undo表空间的处于自动扩展且未指定最大值的情形,对于使用小表空间模式的数据库,undo表空间可能会一再增长,直到达到32GB。或者是在指定了自动扩展及其最大值而月底或年末的批量数据计算导致undo表空间疯狂超范围增长后不再释放。对于这些情形我们需要手动收缩表空间以达到节省空间资源以及数据库管理开销,如rman备份等。本文列出了收缩undo表空间的基本步骤并给出示例。
有关表空间,undo表空间的文章可参考:
Oracle 表空间与数据文件
Oracle 回滚(ROLLBACK)和撤销(UNDO)
检查及设置合理的undo表空间
1、undo表空间收缩的基本步骤
a、使用较小的尺寸创建一个新的undo表空间
SQL> create undo tablespace UNDO_RBS1 datafile 'undorbs1.dbf' size <new size>;
b、设置新的undo表空间为系统undo表空间
SQL> alter system set undo_tablespace=undo_rbs1;
c、删除原始的undo表空间及其数据文件
SQL> drop tablespace undo_rbs0 including contents.
d、使用原始undo表空间名创建一个新的小尺寸的undo表空间并且且换回系统undo,删除过渡undo表空间(此步骤可选)
2、收缩undo表空间示例
--环境 goex_admin@CICCFIX> select * from v$version where rownum<2; BANNER ---------------------------------------------------------------- Oracle Database 10g Release 10.2.0.3.0 - 64bit Production --创建测试表t goex_admin@CICCFIX> CREATE TABLE t 2 AS 3 SELECT rownum AS id, 4 round(5678+dbms_random.normal*1234) AS n1, 5 mod(255+trunc(dbms_random.normal*1000),255) AS n2, 6 dbms_random.string('p',255) AS pad 7 FROM dual 8 CONNECT BY level <= 10000 9 ORDER BY dbms_random.value; Table created. --观察当前回滚段的情形,注意第一行为system表空间的撤销段,用于系统表空间的撤销 --其余的为public,也就是说任意用户都可以使用这些基于undo表空间的回滚段 goex_admin@CICCFIX> @rollback_segments Rollback Name Tablspace Init/Next Extents Min/Max Ex Status Bytes Extents Shrinks Wraps Opt. Size ------------------ ----------- -------------------- ---------- -------- ---------------- ------- -------- -------- ------------ SYS.SYSTEM SYSTEM 114688 / 1 / 32765 ONLINE 393,216 6 0 0 PUBLIC._SYSSMU10$ UNDOTBS 131072 / 2 / 32765 ONLINE 3,276,800 5 77 209 PUBLIC._SYSSMU21$ UNDOTBS 131072 / 2 / 32765 ONLINE 4,325,376 6 75 229 PUBLIC._SYSSMU22$ UNDOTBS 131072 / 2 / 32765 ONLINE 14,811,136 16 194 1,004 PUBLIC._SYSSMU3$ UNDOTBS 131072 / 2 / 32765 ONLINE 4,325,376 6 133 394 PUBLIC._SYSSMU4$ UNDOTBS 131072 / 2 / 32765 ONLINE 4,325,376 6 115 386 PUBLIC._SYSSMU5$ UNDOTBS 131072 / 2 / 32765 ONLINE 4,325,376 6 123 392 PUBLIC._SYSSMU6$ UNDOTBS 131072 / 2 / 32765 ONLINE 5,373,952 7 119 367 PUBLIC._SYSSMU7$ UNDOTBS 131072 / 2 / 32765 ONLINE 5,373,952 7 106 367 PUBLIC._SYSSMU8$ UNDOTBS 131072 / 2 / 32765 ONLINE 4,325,376 6 121 421 PUBLIC._SYSSMU9$ UNDOTBS 131072 / 2 / 32765 ONLINE 11,665,408 13 114 368 --当前undo表空间的大小 goex_admin@CICCFIX> col file_name format a55 goex_admin@CICCFIX> select tablespace_name,fil