问题如下:
    在oracle 9i数据库中有一photo表,该表占用了很大的硬盘物理空间假设为100GB,假设对应的这张表的表空间就占用了100GB,现在把photo表中的50%的记录删除采用delete where的方式,按理来说现在腾出了近50GB的表空间出来。delete 删除后的空间 在oracle中这些空间被标记为unused block的块,也就是说photo这张表对对应的表空间还是占用了100GB,
    在再次插入数据到photo中这张表的时候,表空间自动增加,并没有去利用unused block的这些数据块,那么请问一下应该如何回收这些unused block块,我希望该表占用的表空间减少下来的同时,占用硬盘物理空间的大小也减少下来,用df查看... ...注意:
   IBM Unix ,oracle 9i,
   表记录比较大,用imp/exp的方式去减少表空间是不合实际的。在表中有用到自增的(表空间->表空间名称->存储,选中了数据文件已满后自动扩展,增量5GB。)

解决方案 »

  1.   

    delete 不会回缩表空间的!
    先把想留下的记录存到别的表中去,或者导出到别的地方。
    然后truncate这个表。也可以dorp以后在生成。
    这样才会回缩表空间!
      

  2.   

    ACCESS中有一个关闭时自动压缩的功能, 
    删除access数据库的记录,选中“关闭时自动压缩“, 可以释放空间。
    ... ...
    扯远了。
      

  3.   


    1. 升级到10g下,10g提供了段管理功能,可以通过shrink 命令来收回未被使用的extents,并修改 HWM ;
    2. 9i下使用 ALTER TABLE MOVE 命令把表移动到一个不同的表空间中来回收空间;
    其他的想不出来了,-_-
      

  4.   

    exp然后imp可以,其他方法不知道!
    空间不够,你挂一个吧!
      

  5.   

    释放空间在9i中好像就只有truncate和move两种方法,delete是不会释放空间的。move过后相关的索引需要重建
      

  6.   

    如果本机没有足够的空间就挂一个nfs上去, 再将需要移出的这个表空间的部分文件到nfs上,再在本地创建相应的移进的表空间..如果这个表应用访问比较多的话, 就使用mview刷新然后迁移.停机时间比较长的话, 就alter table move咯..