ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle Clob的一致读

Oracle Clob的一致读

原创 Linux操作系统 作者:abstractcyj 时间:2013-08-22 17:29:48 0 删除 编辑
表里只存储了一个指针,指向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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
曾从事java方向开发多年。近年已经转入数据库方向。主要擅长SQL优化,Oracle数据库问题诊断,Oracle备份与恢复等。服务于医药物流,医院等行业

注册时间:2010-01-26

  • 博文量
    555
  • 访问量
    829406