历史数据不要保留的话,把数据库down掉后,把相应的数据文件offline,再删除掉就可以了嘛;如果要保留,那么就考虑磁盘空间的整理了。

解决方案 »

  1.   

    如果我没有记错toad那个工具由空间整理功能,只是没有用过不清楚效果怎么样。
      

  2.   

    为什么要收缩?
    你的数据要是没用,就像zrb007(彬彬) 说的,把它干掉。
    如果有用的话,你的数据就占用了这么大空间,你如何收缩呀!
    如果有碎片参考:
    http://www.dbonline.cn/source/oracle/20040206/STR_fragmation%20clean%20up.html
      

  3.   

    哦,我没说清楚,是磁盘阵列 数据库里面的数据是有用的,但是当我对其中某些表做操作,例如大量删掉某个表的纪录(10G以上的表),表空间是不会释放的,还是占用着,这样的话,只能通过export 然后再import来做,但是这样的话耗费的时间实在是太多了,一个10G的表(不包括索引)就要做2天,my god
      

  4.   

    谢谢  ashzs((可以包含中文字符))  提的建议,其实我说的export和import就是碎片整理的办法,类似于MSsql的收缩,但是像我上面说的,时间太长了,而且要一个个表来做,有没有其他的什么办法一次性霸所有表都解决呢,请各位指教一下,呵呵。
      

  5.   

    如果单纯是文本数据,你可以考虑用sql*load来做一下!
    因为sql*load的速度比imp/exp快多了。但是imp/exp可以保证数据完整性。
    还要看你的实际情况!
    如果磁盘够大,也没有什么性能要求。大也没什么关系。
    如果有很多不用的历史数据,可以考虑移出备份!
      

  6.   

    例如大量删掉某个表的纪录(10G以上的表),表空间是不会释放的,还是占用着,
    要用drop是不会的,用truncate才行
      

  7.   

    看来也只有imp/exp这种方法了真晕
      

  8.   

    在做oracle的管理的时候我也遇到了这样的一个问题.磁盘空间不够了.其实你只要查一下每个数据库文件的利用率(我们在安装oracle时,建立了根据磁盘大小而默认的数据库文件尺寸,空间占用虽然大,但是有的数据文件利用率是很低的)就可以看出他们的利用百分比,然后把空间大小调整一下就可以释放很大的空间.至于磁盘收缩,我也不是很了解,一般我想应该有这样一个功能的.至于对temp数据文件有多大作用,我就不是很清楚了.
      

  9.   

    回收表的空闲空间
    alter table T_Unit_History deallocate unused