现象:数据库中现有一表空间TSP_ASNP,在前两天数据库的大小才11.6G,这两天突然发现表空间增大到27.6G左右,瞬间硬盘爆满了。  
   过程:中间因年底做报表而创建了一中间表,在准备插入数据时突然发现机器死机,于时便强行结束任务,这样操作作了好几次(不知会造成这样的恶果)
   解决:后来用TOAD查看这个表空间同原来的580M增大到16360M,也就是达到16G,再仔细看原来创建的那个中间表也达到了16G,几次修改表空间提示:ORA-03297文件包含在请求的resize值以外使用的数据。后来没有办法将这个中间表DROP掉了,再次修改还是不行,依然提示这个错误。实际上这个表空间大小现在不到500M,占用率也仅为2.92%。我分别试图到改到1G、2G。。5G、10G均告失败,后来仅仅改小了20M也就是现在的大小为16340。将表空间脱机修改也不行。   现在数据库备份起来特别慢,并且没有办法把备份出来数据COPY到测试服务器上,因为太大了。痛苦之极啊。有哪位高手能告诉我好的解决方法吗?
   看了一些文章说是在extent,如果是索引,可以drop recreate,怎么用啊? 
   用alter table xxx move tablespace_name转移表影响正常使用吗?

解决方案 »

  1.   

    drop之前,truncate表,这样才会释放空间
      

  2.   

    另外,把表exp出来,可以试下
      

  3.   

    楼住的中间表那么大,在drop前是应该先truncate掉的,修改表和索引的maxextents值只于你当前表maxextents已经到了最大值,无法再插入数据再去执行的,和你的情况应该不是同一类,我想先drop tablespace TSP_ASNP including contents;再把那个数据文件手工删除掉,再新建表空间文件,当然这样如果行不通的话(表空间里的数据很重要,不能删除的话),你所说的转移表空间也是可行的
      

  4.   

    感谢大家,回复楼上各位:一、这个中间表在DROP之前,已经TRUNCATE
    二、系统实时性要求较高,恐怕难有时间来EXP,再说这个表空间里都是一些费用相关的大表
    三、至于删除表空间更是不敢做啊大家还有没有更好的办法啊,这几天都是茶不思饭不想,夜不能昧啊!!
    帮帮我啊!!!
      

  5.   

    还是用EXP吧。再把之前的表空间干掉,修建一个。
      

  6.   

    这是由于一些object在高水位附近,你需要查出这些object,然后alter table move 其他表空间,再来resize,如果可以再把表移回来.
    当然最简单的就是先exp,drop tablespace,create tablespace,imp
      

  7.   

    楼主的表空间的盘区管理方式是DICTIONARY?
    是不是INITIAL 太大了?
    在中间表统计数据的过程中是否有很多CREATE、DROP表的操作?
    ....
      

  8.   

    把 表执行move操作应用就可以解决问题
    注意move后需要重建索引