关于LOBSEGMENT和SYS_LOB**$$的释疑

今天,查看到各个表空间差不多爆了,用以下语句查询哪个segment 占用的空间最多

Select Segment_Name,Sum(bytes)/1024/1024 c From User_Extents Group By Segment_Name order by c desc

如图

结果发现两个以前没有见过的Segment_Name ,到底这两个是Segment_Name 存储了什么呢?以下是查看步骤

1、 select * from dba_segments where segment_name = 'SYS_LOB0000075043C00012$$';

看到这是一个LOBSEGMENT;

2、select * from dba_lobs where segment_name like 'SYS_LOB0000075043C00012$$' ;


发现这个 'SYS_LOB0000075043C00012$$'存储的是“?CONTEXT”表 的CONTEXT字段的数据,而 CONTEXT对应的数据类型是CLOG大数据对象,为什么会这样,明明没有在“?CONTEXT”表建立这样的索引,怎么会自动建立了呢?对查询相关资料得出以下解释:

1、我们建一个表的时候,oracle对在对应的表空间在给我们一个segent中来存放数据,并且会因为数据量的增大再做扩展。但是当我们所建立的表中含有lob型的数据时,oracle会为每个lob字段生成一个独立的segment用来存放数据,同时也建立了独立的index segment .oracle对它们是单独管理的。

2;普通表只会新增一个或两个段对象.类型为TABLE和INDEX,数据就存放在表段中.索引就放在索引段中。但是LOB列则额外新增了两个段对象,类型为LOBSEGMENT和LOBINDEX,LOBINDEX用于指向LOB段,找出其中的某一部分,所以存储在表中的LOB存储的是一个地址,或者说是一个指针,实际上表中的lob列中存的是一个地址段.然后在lobindex找到所有的地址段.然后在lobSegment中把所有地址段的值都读取了来。所以lobSegment就保存了LOG列的真正的数据,所以会非常大,并且独立于原始表存在。

3、对于这个 'SYS_LOB0000075043C00012$$'segent如何清理,才不会增长的这么大,暂时还没找到方法





  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值