我那数据库有一个数据表,因为每天要更新它的数据,所以一般每天都Delete该数据表3天内的数据,然后用insert /*+APPEND*/ 的方式将3天内的新数据插入该表,不知不觉,这个数据表居然占用了33G的空间,天啊~!请问我这样子处理数据的方式正常吗?有没有哪种方法可以让它正常起来?

解决方案 »

  1.   

    检查下是哪个文件占这么大的空间是表空间的数据文件不?
    有可能是undo表空间的数据文件,有可能是temp文件。
    如果是归档模式有可能是归档日志文件。
    如果确实是表所在表空间的数据文件的话有可能是你插入和删除太频繁了,可以考虑收缩下数据文件。
      

  2.   

    谢谢楼上的两位兄弟可能是我没说清楚,这个数据表才1千万行左右的数据,但它在表空间里面的大小已经占用到33G了,但是我查过其它几个跟它数据量相近的数据表,有一个仅为6G而已,字段数差不多,但这个表的操作没有33G那个表频繁是不是我的数据插入方式有问题?以前看资料说高水位的插入方式不重用以前的可用空间,指得是一直增加,不重用Delete后的可用空间?
      

  3.   

    delete再insert,而且还是append操作,表空间快速增加很正常
      

  4.   

    然后用insert /*+APPEND*/ 的方式  会使用未被使用过的空间
      

  5.   

    alter table tmp_test move compress;alter materialized view mv_temp_test compress;
    压缩表,物化视图,然后把表空间设置成压缩,不过查询效率又要降低了
      

  6.   

    让DBA看看是不是块的设置有问题。
      

  7.   

    show_space看看你的块的使用情况.
      

  8.   

    alter table table_name shrink space;收缩一下表,不过可能需要占用大量的时间和资源,需要在表没有写操作的时候进行,否则可能锁表
      

  9.   

    是 删除后再 insert /*+APPEND*/ 造成的,这样空间总是增长的,不会缩小。如果要缩小,必须自己手工处理。找DBA也没用。
      

  10.   

    现在只有把表中的数据导出来,然后TRUNCATE TABLE,然后再把数据导回去.这样表占据的空间就会是实际的.
    操作中存在误区:(1)delete表不能减少表占用的空间.
                 (2)只有数据没用了才需要delete.
      

  11.   


    这是一个由oracle方面的人写的一个脚本.你可以去http://asktom.oracle.com去搜索.当然网上也有各种版本可供使用.