事情的起因是缘于昨天半夜的一次问题处理,当时报警表空间将满,马上查找了一下该表空间下面的segment空间使用情况:
SQL> select segment_name, sum(bytes) / 1048576
2 from dba_segments
3 where tablespace_name = 'TEST'
4 group by segment_name
5 order by 2;
发现有这么一个奇怪的以数字命名的segment占用了200多G的空间:
SEGMENT_NAME SUM(BYTES)/1048576
------------------------------ ------------------
299.20715 202681
这个以前也碰到过,不过没啥留意,只知道是在装载数据时生成的临时段,比如在create table t as select * from t1的过程中,会生产类似一个数字的SEGMENT。
在GOOGLE到eygle的文章:Oracle中独一无二的Cache对象,才知道这个段名的含义:299.10715,299是数据文件号,10715是该段在这个数据文件中的块号。
知道了原理后并不能解决问题,v$access无法找出是哪个SID在访问这个OBJECT,只好把v$sqltext中以create和insert开头的SQL语句都找出来,发现只有零星的几条SQL语句在CREATE和INSERT,这些应用的表平时都不足以增大到这么大的空间。于是只好另外定位原因,查到有sql loader在装载数据,看来只能这个东西出问题了,备份好装载脚本后,KILL掉SQL LOADER的进程,果然这个SEGMENT没了,空间也释放出来了。今天才知道由于应用的原因,生成的文本文件由原来的几十G增长到将近1个T,导致平时正常的装载延长到大半夜,空间呈现了数量级的增长。
转自: http://hi.baidu.com/edeed/blog/item/087133fa71d5a81aa8d311c3.html