Oracle表空间利用率极低时的解决办法

在我没有整理数据库之前,导出数据库的表有270多M,导入这个数据库后, 表空间竟然达到了20G。
这是怎么回事,数据库曾经清库好几次,最近刚刚清库,怎么会有这么大的表空间。

我一开始认为是表里面的垃圾数据太多,清库不完整,所以导致表空间这么大,然后我对数据库进行清理, 最后导出数据时已经从270M变成10M了,差距相当大

但是当我再次导入另一个系统时,表空间依然是20G,之后我尝试导入空表,还是20G,这时候我就想到可能是表本身的空间太大了。


看下图:



这仅仅是一个表,就有这么大的空间,肯定是由于原来这个表曾经有过几十万的数据增长到了700多M,删除数据后,表空间不变,所以就导致了上面的原因。


当我把上面的表转存到临时表的时候,显示如下:



仅仅64KB。之后我就按照下面的操作:

1.将原表全部转存到临时表

2.删除原表

3.将临时表存入原表

4.删除临时表


我重新整理完之后,我又导出了,这次从10M变成了7M多。


我在另一电脑上再次导入之后,表空间的大小连100M都没有超过,通过简单的操作,给电脑节省了20G的空间...


再操作上面4步的时候,可能有人会觉得那么多表很麻烦,我说一种我常用的方法,大家看下图:



通过excel可以批量写出样式一样的SQL语句....如果谁有更方便的方法,欢迎交流~~~~~~~~~~~~~

注意事项:上面的操作会丢失表的注释和相应的触发器等等...

这里提供一个从网上搜到的查询表空间的语句


select ff.s tablespace_name,
       ff.b total,
       (ff.b - fr.b) usage,
       fr.b free,
       round((ff.b - fr.b) / ff.b * 100) || '% ' usagep
  from (select tablespace_name s, sum(bytes) / 1024 / 1024 b
          from dba_data_files
         group by tablespace_name) ff,
       (select tablespace_name s, sum(bytes) / 1024 / 1024 b
          from dba_free_space
         group by tablespace_name) fr
 where ff.s = fr.s


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

isea533

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值