Oracle 11:将BLOB设置为NULL后回收空间

时间:2017-07-25 15:40:50

标签: oracle

在这个包含BLOB的表上,到今天为止填充了32GB的表空间,我通过UPDATE语句将它们设置为NULL来删除了大部分BLOB(当然,其余的列保持不变)。实际上没有空间被释放所以我必须添加第二个数据文件,4GB,以便允许INSERT查询工作。我做了一个“改变表X移动”,没有任何好处。我做了一个“alter table X shrink space”,它实际上增加了第二个数据文件的占用率并使第一个数据文件不受影响。

我在网上找到了utility来计算可以节省多少空间,并且它让我可以释放USERS ts只有4004MB,当我预计至少10GB(4GB来自应该基本为空的第二个数据文件加上最初填充到容量= 32GB的第一个数据文件中的至少6GB。

似乎不可能释放空间。设置为NULL是个坏主意吗?为什么Oracle拒绝将任何空间视为可回收?

请指教。

1 个答案:

答案 0 :(得分:0)

检查这是否有帮助:
http://www.dba-oracle.com/t_update_blob_reclaim_space.htm

  

答案: LOB / BLOB列仍然存在于表块中,并且数据仍然存在。它仅标记为未使用。要释放空间,请使用以下命令:

alter table 
   my_tab
modify lob
   event_data
(shrink space);
     

请记住,在将列更新为null或empty_blob之后,必须缩小高架或移动。