Oracle Clob的一致读

表里只存储了一个指针,指向LOB的存储位置。而具体到存储,还分为lobindex,和lobsegment。表中的LOB实际上是指向lobindex, 而lobindex再指向LOB本身的各个部分。为了得到LOB中的N~M字节,要使用表中的指针(LOB定位器)解除引用,遍历lobindex来找到所需的数据库(chunk), 然后按顺序访问。这使得随机访问LOB的任何部分都同样迅速,你可以用同样快的速度来得到LOB的最前面,中间或者最后面的部分而无需再从头遍历LOB。

LOB的存储可以指定存储方式:

  CREATE TABLE "SCOTT"."TEST_CLOB2" 
   ( "A" CLOB
   ) SEGMENT CREATION DEFERRED 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  TABLESPACE "USERS" 
 LOB ("A") STORE AS BASICFILE (
  TABLESPACE "USERS" DISABLE STORAGE IN ROW CHUNK 8192 RETENTION 
  NOCACHE LOGGING ) ;

TOM Kyte:
默认行为是启用行内存储(ENABLE STORAGE IN ROW),而且一般来讲,如果你知道LOB 总是能
在表本身中放下,就应该采用这种默认行为。例如,你的应用可能有一个某种类型的DESCRIPTION 字段。
这个DESCRIPTION 可以存储0~32KB 的数据(或者可能更多,但大多数情况下都少于或等于32KB)。
已知很多描述都很简短,只有几百个字符。如果把它们单独存储,并在每次获取时都通过索引来访问,就
会存在很大的开销,你完全可以将它们内联存储,即放在表本身中,这就能避免单独存储的开销。不仅如
此,如果LOB 还能避免获取LOB 时所需的物理I/O。

create table test_clob(a clob);

declare
 v_result varchar2(4000);
begin
 v_result := dbms_metadata.get_ddl(object_type => 'TABLE',name => 'TEST_CLOB');
 dbms_output.put_line(v_result);
end;

  CREATE TABLE "SCOTT"."TEST_CLOB" 
   ( "A" CLOB
   ) SEGMENT CREATION DEFERRED 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  TABLESPACE "USERS" 
 LOB ("A") STORE AS BASICFILE (
  TABLESPACE "USERS" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION 
  NOCACHE LOGGING ) 


另外, LOB的一致读的实现方式与其他数据类型是不一样的:
LOB的一致读映像来自于LOB段本身,而不是undo段。




 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8520577/viewspace-769067/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8520577/viewspace-769067/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值