如题:现在把表空间SPACE1中的一部分表MOVE到SPACE2后,如何收缩SPACE1的空间?
ALTER DATABASE FILE ... RESIZE ... 会出错:ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据

解决方案 »

  1.   

    可以参考:http://space.itpub.net/7204674/viewspace-664188
      

  2.   

    这种方法我试过了,要全部表都移到别的表空间后才能收缩文件,而且有时候还不成功,从网上找到另外一种方法就是:
    ALTER TABLE TABLENAME ENABLE ROW MOVEMENT;
    ALTER TABLE TABLENAME  SHRINK SPACE CASCADE;
    ALTER TABLE TABLENAME  MOVE TABLESPACE TABLESPACE_NAME;
    --接着就可以开始收缩这部分移走的空间了但是用这个方法有个前提,就是要从一个文件中最大的块号开始移动才能收缩文件,如果不是从最大的块开始移动也是不能收缩的
      

  3.   

    1.将该表空间下的RECYCLEBIN对象清除。
    2.找出收缩空间大小之外的对象迁移到另外表空间:
    SELECT owner,segment_name,(block_id+blocks)*8/1024 loc_size FROM DBA_EXTENTS where tablespace_name='TBS_DATA'
    3.然后再把你的文件缩小:
     ALTER DATABASE DATAFILE 6 RESIZE 100M;