现在有一张含有LOB字段的表TAB_EXM,没有分区。日积月累后发现该表所占用的表空间日益增大。已经达90G的数据量。但我查看表TAB_EXM所占的空间只有几百M而已,LOB字段存储的内容实际上是放到另一个段中的。请问我如何来清理历史数据呢?谢谢!

解决方案 »

  1.   

    那你查是哪个segment在占空间。然后检查是本来就有那么大的数据量,还是经常DELETE,而HWM没降低。
      

  2.   

    如果存储有LOB字段, 你就只好删除表中的记录了. 因为LOB对象同样是你表中的内容. 
      

  3.   

    试试
    alter table <table> modify lob(<column>)(shrink space cascade);
      

  4.   


    检查结果就是LOB字段中指向的那个段占用了大量的空间。这个之前是有SH脚本来清理数据的,但是发现很早放上去的SH脚本没有执行成功,报错:执行脚本语言出现异常:ORA-01555: snapshot too old: rollback segment number 20 with name "_SYSSMU20$" too small
      

  5.   


    请问兄台的意思是不是我删除了表TAB_EXM中的记录后,存放LOB的占用大量表空间的对象也同步会被删除?
      

  6.   

    存储在LOB字段的话是这样的.