查看表中包括blob字段在内的未被delete的记录的大小

gengzhizhen 2009-08-03 04:47:45
详细请参见http://www.itpub.net/thread-1199104-1-1.html
...全文
134 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gengzhizhen 2009-10-05
  • 打赏
  • 举报
回复
dd
inthirties 2009-08-03
  • 打赏
  • 举报
回复
好深入的问题,

这里对dbms_space.unused_space这个procedure的实现机制不了解,不知道你这里运行完后的结果究竟是怎样的,是对还是错,这里先谈谈自己的认识。

首先,正如你提到的,你的表里含有lob字段,对于这种类型的字段来说,oracle并不是和table的segment存在一起的,而是对于每个lob的字段,都会多出两个segement一个类似于SYS_LOB0000051373C00002$$ 一个类似于SYS_IL0000051373C00002$$,分别来对于blob的segemnt和其index segment。当表被drop掉时,这两个表也是会drop的,而本身表里的记录存的是一个locator,通过其来locate到这两个segment,得到lob字段的data。这里不知道,unuse_space计算的时候会不会把这些lob的segment也算上,如果有误差可能就是这里造成的误差了。

不过看unuser_space的参数是把segement做为参数的,所以估计是没有用到这里的lob的segment的。

其实对于lob的字段来说,当delete以后也是会清理到无用的data的,不过是空间并没有压缩,如果你要压缩表的空间的同时,还想shrike这些blob的空间的话,你可以用命令
alter table yourlobtable shrink space cascade;
或者
alter table yourlobtable modify lob(lobcolumn) (shrink space);

这两个命令好像是只能10g支持哟,不过上面的命令需要先enable row movement哟。

majy 2009-08-03
  • 打赏
  • 举报
回复
你删除一条有很大数据量的blog的记录,再比较一下没删除前的结果,马上就可以得到答案了

17,378

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧