当前位置:操作系统 > Unix/Linux >>

收缩undo表空间

收缩undo表空间
 
      通常情况下,如果undo表空间的处于自动扩展且未指定最大值的情形,对于使用小表空间模式的数据库,undo表空间可能会一再增长,直到达到32GB。或者是在指定了自动扩展及其最大值而月底或年末的批量数据计算导致undo表空间疯狂超范围增长后不再释放。对于这些情形我们需要手动收缩表空间以达到节省空间资源以及数据库管理开销,如rman备份等。本文列出了收缩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表空间示例
[sql] 
--环境  
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,file_name,AUTOEXTENSIBLE,bytes/1024/1024 size_mb  
  2  from dba_data_files where tablespace_name like '%UNDO%';  
  
TABLESPACE_NAME                FILE_NAME                                               AUT    SIZE_MB  
------------------------------ ------------------------------------------------------- --- ----------  
UNDOTBS                        /u02/database/CICCFIX/undo/undotbs1CICCFIX2.dbf         YES 24280.3125  
  
--当前数据库存在的事务,为零值,表示没有未提交的事务  
goex_admin@CICCFIX> select count(*) from v$transaction;  
  
  COUNT(*)  
----------  
         0  
  
--更新测试表以产生大量的undo  
goex_admin@CICCFIX> update t set pad=dbms_random.string('l',255);    
  
10000 rows updated.  
  
--再次观察undo使用情况  
--可以看到7号undo段上的extents由7增加到11,其字节数由5,373,952增加到9,568,256,增加了4M多  
goex_admin@CICCFIX> @rollback_segments  
  
Rollback Name      Tablspace   Init/Next Extents    Min/Max Ex Status              Bytes Extents  Shrinks    Wraps    Opt. Size  
------------------ ----------- -------------------- ---------- -------- ---------------- ------- -------- -------- ------------  
SYS.SYSTEM         SYSTEM    
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,