查找文件id:
select file#,name from v$datafile;找到文件中最大的块号(以18为例)
SQL> select max(block_id) from dba_extents where file_id=18;
MAX(BLOCK_ID)
-------------
       244992--查看数据库块大小
SQL> show parameter db_block_size;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_block_size                        integer     8192
计算大小SQL> select 244992*8/1024 from dual;
244992*8/1024
-------------
         1914最后你resize到大于这个值的最小值:
ALTER DATABASE DATAFILE '/data/eucpdb/eucpdb/BASEINFO.dbf' RESIZE 2000M

解决方案 »

  1.   

    如果你还想将数据文件压缩得更小,就需要移动block id较大的表到其他表空间,然后将表空间进行压缩,最后又将表移回来。
    可以参考这个博客:
    http://blog.csdn.net/fm0517/article/details/5969553
      

  2.   


    剩余的不多,如果使用率比较高的话,就别压缩了。非要压缩,可以考虑:
    1.move 到别的表空间,收缩文件,再 move 回来。
    2.方法1 中,如果不想移回来,可以考虑把原 TS 干掉,再修改新 TS 间的名称(10g 及以上版本可用)。
    3.exp/imp 一下。这 3 个方法,都要重建 IX,并且要手动收集一下统计信息。
      

  3.   

    如果你还想将数据文件压缩得更小,就需要移动block id较大的表到其他表空间,然后将表空间进行压缩,最后又将表移回来。
    可以参考这个博客:
    http://blog.csdn.net/fm0517/article/details/5969553
    我试验了还是不好用啊,不能resize数据文件
      

  4.   

    查找文件id:
    select file#,name from v$datafile;找到文件中最大的块号(以18为例)
    SQL> select max(block_id) from dba_extents where file_id=18;
    MAX(BLOCK_ID)
    -------------
           244992--查看数据库块大小
    SQL> show parameter db_block_size;
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    db_block_size                        integer     8192
    计算大小SQL> select 244992*8/1024 from dual;
    244992*8/1024
    -------------
             1914最后你resize到大于这个值的最小值:
    ALTER DATABASE DATAFILE '/data/eucpdb/eucpdb/BASEINFO.dbf' RESIZE 2000M
    按照这个方法试验了,还是不能resize
      

  5.   

    剩余空间 的块是不连续的, 应该没有resize 是没用的。 除非是,一堆的没有用过的连续块。
    以前人家有说过, 导出 ,再重新导入。 
      

  6.   


    哦,必须datafile里面的块是连续的resize才好用呗
      

  7.   

    这个表空间的数据包括了几个用户的数据,如果这些数据不是经常要用的,可以按用户将一部份不是经常用的数据归档到一个归档数据库中存储起来,然后再剩下的数据移动到一个过度的临时表空间中,然后RESIZE这个这原空间的数据文件,最后把过度临时表空间的数据移到回到原表空间中,最后把这个过度的临时性的表空间删除掉。
      

  8.   


    都是一个用户的数据,我把部分的表移动到新建的表空间,然后resize原来的数据文件,还是不允许resize。
      

  9.   

    因为你的某个对象的最大块号在高位上DBA_EXTENTS,所以无法收缩
    另外,利用MOVE后,表上的索引会失效,注意应重建