由于我进行了一次sqlserver到oracle的数据移植,导致UNDOTBS01.DBF文件达到10G+,我想压缩一下,在网上找到了一个方法:

-- 创建一个新的小空间的undo tablespace
create undo tablespace UNDOTBS02 datafile 'E:\oracle\10.2.0\oradata\ORCL\UNDOTBS02.DBF' size 100m;
-- 设置新的表空间为系统undo_tablespace
alter system set undo_tablespace=UNDOTBS02;
-- Drop 旧的表空间
drop tablespace UNDOTBS01 including contents;--查看所有表空间的情况
select * from dba_tablespaces

我想问一下,这个方法可行吗,UNDOTBS01.DBF文件有什么作用,删除掉会不会影响现有的数据库

解决方案 »

  1.   

    一种是system 里面的system rollback segment, 
    一种是单独的rbs/undo tablespace里面的undo segment. 
      

  2.   

    不行的,一个数据库只能有一个回退表空间,如果你要跟换回退表空间,还需要指定参数:undo_tablespace
    alter system set undo_tablespace='UNDOTBS02';
      

  3.   

     搞不好会报错。还有默认的回滚段你没有设置。
    *._corrupted_rollback_segments=("_SYSSMU1$","_SYSSMU2$","_SYSSMU3$","_SYSSMU4$","_SYSSMU5$","_SYSSMU6$","_SYSSMU7$","_SYSSMU8$","_SYSSMU9$","_SYSSMU10$")
      

  4.   

    undo太大你不用去管.如果空间够用,那么保证你最大的事务量的大小尺寸就可以了.如果你实要想缩小,那么只有建一个新的,再切换啰