Oracle10g数据库,数据文件放在E盘,D盘200G还剩40G,E盘300G还剩2G。
UNDO表空间建在D盘了,数据库T中有个A表,数据量非常大。在网上搜索了一些方法都不行。我先delete了A表一部分数据。(有些数据要保留,不能用truncate全部删除)1、用alter table A shrink space cascade
报错 ORA-30036:无法按8扩展段(在还原表空间'UNDOTBS1'中)2、用exp user/pass@ file=d:\A.dmp tables=(A) compress=y grants=y buffer=2048000 也报空间不足。3、用alter tablespace T coalesce没有发现有什么改变。4、move应该也会报空间不足,所以我没试。5、目前正用analyze table A compute statistics结果还没出来。请问一下还有什么办法没有?

解决方案 »

  1.   

    select * from dba_data_files;
    +1一个
      

  2.   

    analyze也报空间不足。lzd_83可能没仔细看我写的内容吧,现在我不是想扩展表空间,是想回收表空间。
      

  3.   

    可以对undo进行重建建立在D盘。。而再对各个表分区添加datafile指向D盘即可
      

  4.   


    ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS1'
      

  5.   


    UNDO已经在D盘重建过了,可是执行一次shink都会报错。 有没有不产生UNDO的办法?
      

  6.   

    select segment_name,sum(bytes)/1024/1024 from user_extents group by segment_name----提取本地自建表的容量大小,用于本地空间不够时的清理。
    select * from ALL_OBJECTS where owner = upper('name'); -- 自己建在库里的表
      

  7.   

    -- 先查看UNDOTBS1表空间的使用情况:
    SELECT a.tablespace_name as tablespace_name,
           to_char(b.total/1024/1024,999999.99) as Total,
           to_char((b.total-a.free)/1024/1024,999999.99) as Used,
           to_char(a.free/1024/1024,999999.99) as Free,
           to_char(round((total-free)/total,4)*100,999.99) as Used_Rate
    FROM (SELECT tablespace_name, sum(bytes) free FROM DBA_FREE_SPACE GROUP BY tablespace_name) a,
         (SELECT tablespace_name, sum(bytes) total FROM DBA_DATA_FILES GROUP BY tablespace_name ) b
    WHERE a.tablespace_name=b.tablespace_name
      AND a.tablespace_name='UNDOTBS1'
    ORDER BY a.tablespace_name;TABLESPACE_NAME                TOTAL                USED                 FREE                 USED_RATE
    ------------------------------ -------------------- -------------------- -------------------- --------------
    UNDOTBS1                         15000.00               770.19             14229.81              5.13-- 如果Used_Rate(即空间使用率)超过80%,建议加大UNDOTBS1表空间的数据文件!-- 查看 UNDOTBS1 表空间相关的数据文件
    sys@SZTYORA> select name from v$datafile where ts# in (select ts# from v$tablespace where name='UNDOTBS1');NAME
    --------------------------------------------------------------------------------------------------------------------
    /ora/u01/app/oracle/oradata/sztyora/undotbs01.dbf-- 扩展数据文件的大小:
    alter database datafile '/ora/u01/app/oracle/oradata/sztyora/undotbs01.dbf' resize 20480M;-- 从上面的查询可以看到:我的UNDOTBS1表空间的总大小(TOTAL字段)是15000M,约15G,假设其使用率为95%啦(我想将其扩大为20G),此时可以通过扩展数据文件大小来增大UNDOTBS1表空间,
    -- 当然:还可以通过为UNDOTBS1表空间添加数据文件扩展UNDOTBS1表空间!-- 注意:如果你的系统是Windows的,且磁盘格式化为FAT32,其最大文件是有限制的(好像是4G吧,忘记啦),此时:单个数据文件应该不能超过4G,否则会报错!
      

  8.   

    -- 一句话:事情是死的,人是活的,如果你连这么简单的问题也搞不定的话,我劝你:还是别搞DBA啦!
      

  9.   


    你可能没看我的回复,现在我的D盘只有40G空间了,A表的数据量太大了,40G的UNDO表空间不够执行一次shrink
      

  10.   

    两种办法:
    1、在D盘添加表空间数据文件,不过这样可能不符合楼主的初衷;
    2、在D盘添加表空间数据文件,然后把A表的一部分数据移动到新的表空间备份起来,然后再在A表中删除备份的数据,只保留剩余的数据。
    另外,shrink需要多大的UNDO表空间这个倒是没有尝试过。
      

  11.   


    A表的数据量太大了,移动(move)和导出(exp)空间都不够,所以我才用shrink,可是还是报空间不够。
      

  12.   

    已经加了五块硬盘,目前确实没有硬盘可用了。我想删除一部分数据,然后回收表空间。
    我想知道在目前的基础上有没有什么办法可以达到这种效果?
    有没有不产生UNDO的办法?
      

  13.   

    我的做法是EXP到远程机器的硬盘上(做备份),然后删除本地数据,我的是分区表,