单位一个Oracle 11g的生产数据库,之前一直很稳定,用了一年多,表空间达到700多MB。最近半个月不知道怎么回事,业务没发生大的变化,但是数据库增长迅速,表空间已经到了2G多。应该怎样查看数据库中各个对象的实际大小呢?或者怎样检查什么地方有异常?
------解决思路----------------------
1、空间增长后,数据库不会自动收缩。
另外,即使原来占用表空间的对象被删除(drop),从表空间的角度看,空间并不减少。但在表空间内,这部分空间可以被其它对象所使用。如果原来占用表空间的对象中的数据被delete,那么该对象所占用的空间也是不会减少,而且这些被删除数据占用的空间不能被其它对象所使用,而只能由该对象继续使用。
2、对于你的这种情况,建议首先通过dba_segments视图,查找出占用相应表空间最多的前10个对象。然后通过show_space存储过程,分别查看各个对象的占用空间的使用情况。show_space存储过程代码附后。
3、以下链接中有使用show_space的实际样例供参考。
http://www.blogjava.net/decode360/archive/2009/07/14/287767.html
------解决思路----------------------
user_segments 查查这个。
------解决思路----------------------
select t.owner,t.segment_name,sum(t.bytes)/1024/1024 from dba_segments t group by t.owner,t.segment_name order by 3 desc
看看什么对象占用的空间最大,然后看看是正常的吗