由于失误我一次性提交了很多数据,提交之后发现UNDOTBS01.DBF文件巨大,并且查看了一下使用空间99%。
我如何把他压缩的小一些,如何操作。

解决方案 »

  1.   

    以SYS用户登录Oracle 自带的SQL*PLUS的方法:
    sys
    oracle
    orcl as sysdba
    Oracle的UNDOTBS01.DBF文件太大的解决办法 :-- 创建一个新的小空间的UNDO TABLESPACE
    CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE 'D:\ORACLE\ORADATA\ORCL\UNDOTBS02.DBF' SIZE 100M REUSE AUTOEXTEND ON;
    -- 设置新的表空间为系统UNDO_TABLESPACE
    ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS2;
    -- DROP 旧的表空间
    DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS;
    SELECT * FROM DBA_TABLESPACES;完成后删除D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF,然后进行出下操作:-- 创建一个新的小空间的UNDO TABLESPACE
    CREATE UNDO TABLESPACE UNDOTBS1 DATAFILE 'D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF' SIZE 100M REUSE AUTOEXTEND ON;
    -- 设置新的表空间为系统UNDO_TABLESPACE
    ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS1;
    -- DROP 旧的表空间
    DROP TABLESPACE UNDOTBS2 INCLUDING CONTENTS;
    --查看所有表空间的情况
    SELECT * FROM DBA_TABLESPACES;完成后删除D:\ORACLE\ORADATA\ORCL\UNDOTBS02.DBF。
    如果临时表空间很大处理的方法类似。
      

  2.   

    1. 确认表空间名
    SQL>show parameter undo_tablespace;
    NAME TYPE VALUE
    ———————————— ———– ——————————
    undo_tablespace string UNDOTBS12. 查找表空间datafile
    SQL>select * from dba_data_files where tablespace_name = ‘UNDOTBS1′;
    FILE_NAME TABLESPACE_NAME BYTES
    ——————————————————————————– —————————— ———-
    /opt/oracle/oradata/undotbs01.dbf UNDOTBS1 209715200SQL> select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks from v$rollstat order by rssize;
    USN XACTS RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024 SHRINKS
    ———- ———- ——————— ———————- ———-
    0 0 0.00035858154296875 0.00035858154296875 0
    2 0 0.00109100341796875 0.00304412841796875 2
    4 0 0.00109100341796875 0.00304412841796875 2
    10 0 0.00109100341796875 0.00206756591796875 1
    5 0 0.00109100341796875 0.00206756591796875 1
    7 0 0.00109100341796875 0.00206756591796875 1
    1 0 0.00206756591796875 0.00206756591796875 1
    3 0 0.00206756591796875 0.00304412841796875 1
    8 0 0.00206756591796875 0.00304412841796875 1
    9 0 0.00206756591796875 0.00304412841796875 1
    6 0 0.00218963623046875 0.00218963623046875 13. 创建新的undo表空间
    SQL> create undo tablespace undotbs2 datafile ‘/opt/oracle/oradata/undotbs02.dbf ‘ size 50M autoextend on next 50M maxsize 200M extent management local;4. 切换udon表空间至新表空间
    SQL> alter system set undo_tablespace=undotbs2 scope=both;5. 查询切换后的表空间
    SQL>show parameter undo_tablespace;
    NAME TYPE VALUE
    ———————————— ———– ——————————
    undo_tablespace string UNDOTBS2SQL> select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks from v$rollstat order by rssize;
    SQL> select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks from v$rollstat order by rssize;USN XACTS RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024 SHRINKS
    ———- ———- ——————— ———————- ———-
    11 0 0.00011444091796875 0.00011444091796875 0
    12 0 0.00011444091796875 0.00011444091796875 0
    13 0 0.00011444091796875 0.00011444091796875 0
    15 0 0.00011444091796875 0.00011444091796875 0
    17 0 0.00011444091796875 0.00011444091796875 0
    19 0 0.00011444091796875 0.00011444091796875 0
    20 0 0.00011444091796875 0.00011444091796875 0
    18 0 0.00011444091796875 0.00011444091796875 0
    16 0 0.00011444091796875 0.00011444091796875 0
    14 0 0.00011444091796875 0.00011444091796875 0
    0 0 0.00035858154296875 0.00035858154296875 06. drop掉原来的表空间
    SQL>drop tablespace undotbs1 including contents and datafiles;
    可以参考http://www.inthirties.com/?p=681
    ==================================================================
    Inthirties关注Oracle数据库 维护 优化,安全,备份,恢复,迁移,故障处理如果你需要帮助或想和我一起学习的请联系
    联系方式QQ:370140387
    QQ群:  85837884(注明:数据库)
    电子邮件:[email protected]
    网站: http://www.inthirties.com