ITPub博客

首页 > 数据库 > Oracle > 收缩oracle表空间时ora-03297错误的解决

收缩oracle表空间时ora-03297错误的解决

原创 Oracle 作者:21ccz 时间:2006-07-20 09:41:44 0 删除 编辑

在实际使用中我们经常会遇到oracle某个表空间占用了大量的空间而其中的数据量却只占用了少量空间,此时我们可以用ALTER DATABASE DATAFILE '***.dbf' RESIZE nnM的命令来收缩表空间,但在收缩的过程中会遇到ora-03297错误,表示在所定义的空间之后有数据存在,不能收缩,此时的解决办法有:

1. 先估算该表空间内各个数据文件的空间使用情况:

SQL>select file#,name from v$datafile;

SQL>select max(block_id) from dba_extents where file_id=11;

MAX(BLOCK_ID)
-------------
13657

SQL>show parameter db_block_size

NAME TYPE VALUE
----------------------------- ------- ----------- db_block_size integer 8192
SQL>select 13657*8/1024 from dual;

13657*8/1024
-----------
106.695313

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

SQL> alter database datafile '/ora_data/cninsite/insitedev02.dbf' resize 100M;
alter database datafile '/ora_data/cninsite/insitedev02.dbf' resize 100M
*
ERROR at line 1:
ORA-03297: file contains used data beyond requested RESIZE value

SQL> alter database datafile '/ora_data/cninsite/insitedev02.dbf' resize 107M;

Database altered.

2.如果某些表占用了数据文件的最后一些块,则需要先将该表导出或移动到其他的表空间中,然后删除表,再进行收缩。不过如果是移动到其他的表空间,需要重建其索引。

SQL> alter table t_obj move tablespace t_tbs1;

具体情况可以参考:http://www.cnoug.org/viewthread.php?tid=15284

另外主意:alter tablespace xxx coalesce只能把相邻的空余数据块连成一些比较大的空块,但是不会移动当前的数据块。

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/40472/viewspace-850737/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论
  • 博文量
    7
  • 访问量
    285134