Welcome 微信登录

首页 / 数据库 / MySQL / Oracle表空间利用率极低时的解决办法

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

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

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

这仅仅是一个表,就有这么大的空间,肯定是由于原来这个表曾经有过几十万的数据增长到了700多M,删除数据后,表空间不变,所以就导致了上面的原因。
当我把上面的表转存到临时表的时候,显示如下:

仅仅64KB。之后我就按照下面的操作:1.将原表全部转存到临时表2.删除原表3.将临时表存入原表4.删除临时表
我重新整理完之后,我又导出了,这次从10M变成了7M多。
我在另一电脑上再次导入之后,表空间的大小连100M都没有超过,通过简单的操作,给电脑节省了20G的空间...
再操作上面4步的时候,可能有人会觉得那么多表很麻烦,我说一种我常用的方法,大家看下图:

通过excel可以批量写出样式一样的SQL语句....如果谁有更方便的方法,欢迎交流~~~~~~~~~~~~~注意事项:上面的操作会丢失表的注释和相应的触发器等等...这里提供一个从网上搜到的查询表空间的语句
  1. select ff.s tablespace_name,  
  2.        ff.b total,  
  3.        (ff.b - fr.b) usage,  
  4.        fr.b free,  
  5.        round((ff.b - fr.b) / ff.b * 100) || "% " usagep  
  6.   from (select tablespace_name s, sum(bytes) / 1024 / 1024 b  
  7.           from dba_data_files  
  8.          group by tablespace_name) ff,  
  9.        (select tablespace_name s, sum(bytes) / 1024 / 1024 b  
  10.           from dba_free_space  
  11.          group by tablespace_name) fr  
  12.  where ff.s = fr.s  
更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12同版本 Oracle 11g 数据库移植详解MongoDB Multikeys索引相关资讯      Oracle高级培训 
  • delete表的数据后恢复  (08/30/2012 08:59:58)
  • 使用ASH信息,发现高CPUsession  (08/14/2012 07:21:32)
  • 如何阅读Oracle Errorstack Output  (08/14/2012 07:15:47)
  • Oracle Apps Patching:adpatch(  (08/16/2012 15:41:37)
  • 话说V$SQL_MONITOR  (08/14/2012 07:19:54)
  • Oracle Apps DBA工具:ADADMIN使用  (08/14/2012 07:00:09)
本文评论 查看全部评论 (0)
表情: 姓名: 字数