日期:2014-05-17  浏览次数:20997 次

磁盘空间马上满了,表空间高水位降不下来无法收缩,尝试了各种办法均无法解决,紧急求助各位大神啊!!!!
环境:RHEL 5.4 X86_64,  Oracle 10g 10.2.0.1 64bit
存储:7.2T磁盘柜,EXT4

有两个bigfile表空间EMAIL_TABLE和EMAIL_INDEX

库中有三个最大的表,EMAIL_HOT,  EMAIL_TEMP,  EMAIL_TEST 。均为分区表,以其中的时间字段按范围分区,每两小时一个分区

表中所有分区均在EMAIL_TABLE表空间,三个表所有的索引的分区(索引均为local)均在EMAIL_INDEX表空间

SQL*Loader 7*24小时入库中

以上为背景
-----------------------------------------------------

由于无法预测的数据量激增等原因,现在磁盘空间写了99%,删除了三个表中一些可以删除的历史分区,数据可以再入了,两个表空间占用率均下降到40%,想收缩表空间清理磁盘空间。想到两个办法
1·直接resize datafile
-------------失败,表空间HWM高水位水平过高,文件无法收缩。

2·创建新的表空间,写一段代码将以前表空间的所有对象move过去,再删除原有的表空间

-------------无法实现,这么做需要格外的磁盘空间支持

2·尝试alter table 表名 shrink space cascade ,看能否降低表空间高水位,再resize datafile
-------------失败,完成该操作后还是无法resize,似乎高水位没有降低。


求助各位大神,有没有什么办法啊,东西不能删除啊,磁盘就要写满了,可能还要创建别的表空间,满了就没法用了。。。。。。

------解决方案--------------------
1.将该表空间下的RECYCLEBIN对象清除。
2.找出收缩空间大小之外的对象迁移到另外表空间:
SELECT owner,segment_name,(block_id+blocks)*8/1024 loc_size FROM DBA_EXTENTS where tablespace_name='TBS_NAME'
order by 3 desc;
3.然后再把你的文件缩小:
 ALTER DATABASE DATAFILE 6 RESIZE 100M;