oracle--缩小表空间大小

 oracle database用一段时间以后,硬盘空间会不够,更甚者硬盘会used 100%。(oracle表空间设置为自动扩展)。此时oracle会出现各种莫名其妙的错误,为保持oracle数据库的稳定,我们需要实时查看硬盘空间。 那么怎样缩小一些不用的表空间,以释放硬盘空间?

  oracle常用的此类命令Alter database datafile(tempfile),当然也可从toad等UI工具去操作。

  ALTER DATABASE TEMPFILE '/opt/oracle/oradata/gctwp101/temp02.dbf' RESIZE 1229M;

    如果盲目去操作,oracle会报ora-03297错误。表示在所定义的空间之后有数据存在,不能收缩。我们不得不查出最后的数据所处的位置, 然后表空间设置到稍比这位置大一点的大小。

  1. 查该数据文件中数据处在最大位置

    select max(block_id) from dba_extents where file_id=15;

      max(block_id)

        383497 

    查询file_id,也可在toad工具tablespace直接看到。

    select file#,name from v$datafile;

 

  2. 查出最大块位置

    select 383497*8/1024 from dual;

  

      2996.0703125

    

    这说明该文件中最大使用块位于2996M与3000M之间,

  3. 修改表空间(也可用toad工具界面修改)

    

    ALTER DATABASE TEMPFILE '/opt/oracle/oradata/gctwp101/temp02.dbf' RESIZE 3000M;

  

posted @ 2011-01-21 10:42  Java Oracle SQL技术  阅读(14004)  评论(0编辑  收藏  举报