在视图dba_free_space和dba_tablespace_usage_metrics中可以看见undo表空间使用率99.5%,但是在事务视图sys.v_$transaction中却没有记录,通过dba_segments查询undo表空间的使用大小和表空间的大小基本相同了。
求解答:undo表空间中没有事务,是什么占用了空间,如何释放这些空间~~

解决方案 »

  1.   


    undo 里保存的是数据的前镜像,在做一些大的事务时,可能会涨的很快。 可以把undo tablespace 设大一点. 参考:
    Oracle undo 回滚段管理
    http://blog.csdn.net/tianlesoftware/archive/2009/11/30/4901666.aspx------------------------------------------------------------------------------ 
    Blog: http://blog.csdn.net/tianlesoftware 
    网上资源: http://tianlesoftware.download.csdn.net 
    相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx 
    DBA1 群:62697716(满); DBA2 群:62697977
      

  2.   

    但是在事务的数据字典中都没有记录,可以说是没有事务的吧!你给的这个blog已经看过了,对这个问题没有啥太大的帮助呀~而且,正常的业务数据来看,2G的空间就够了,现在已经扩到8G,还是满了
      

  3.   

    即使你已经提交了数据,UNDO里的数据也会保持15分钟(可自己设定时间)
    和有事务有没有完成没有关系。
      

  4.   


    --加个数据文件
    ALTER TABLESPACE undo
    ADD DATAFILE '你的安装路径/undo02.dbf' size 10M
    AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED;
      

  5.   

    UNDO里存放了对数据所有修改操作,Oracle不是有个“回收站”功能嘛,这其实就是临时放一下数据,到指定时间就清除了……
      

  6.   

    to wkc168:
       现网的东西,添加和删除不能随便操作的,所以这个操作的可行性不大,而且10M的空间对现在的空间来说基本上没有什么用。to Blaider:
       就算你说的数据在undo中至少会保存15分钟,现在的情况是一天基本上使用率都在100%上面了,通过alter rollback segment undotbs1 shrink;也释放不出来。
      

  7.   


    undo 里存放的是数据的前镜像。 默认保存是15分钟。当undo 空间不够时,会覆盖那些已经超过15分钟的数据。 你的undo 空间已经达到8G了,可能是有些空间没有释放。 有两种方法:
    1. 增加undo 空间。
    2. 重新新建一个undo,然后将undo 切换到该空间。 这样能节省一点空间。
       Alter system set undo_tablespace=undotbs1;undo 表空间的大小根据不同的系统来决定,没有固定的大小。 一般的做法,如果磁盘空间允许可以直接给undo 20G空间。空间有限就分配8G undo。 大量的DML 操作会产生大量的undo,尤其是update,delete。 当Undo 特别大的时候,我们可以把undo 删了重建。 也就是上面的第二种解决方法。alter rollback segment undotbs1 shrink; 是挣对回滚段的。 你用的是undo 表空间. ------------------------------------------------------------------------------ 
    Blog: http://blog.csdn.net/tianlesoftware 
    网上资源: http://tianlesoftware.download.csdn.net 
    相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx 
    DBA1 群:62697716(满); DBA2 群:62697977
      

  8.   

    你说的这种情况是需要急用undo的时候采取的操作吧,undo一天一直100%是正常的么
      

  9.   


    用这个命令看一下undo 表空间:
    select sum(bytes) ,status from dba_undo_extents group by status;expired 是可用的空间。undo 一般都是会重用的,当事务还没结束,开了retention guarantee,在undo_retention时间内不能被重用。 如果UNDO 空间不够,事务是无法执行的,数据库会挂住。如果说在undo表空间足够大的情况下,利用率一直居高不下,可以检查一下相关SQL,看是否能优化。
      

  10.   

    问题还是没有最终解决掉,undo空间中一个segment对象_SYSSMU能占800M,先结贴了