博学,审问,慎思,明辨,笃行

导航

Oracle LOB类型学习(转)

一、LOB类型分类 
CLOB:字符LOB.用于存储大量的文本信息.采用默认字符集存储 
NCLOB:
用于存储字符LOB,采用数据库的国家字符集来存储字符.而不是数据库的默认字符集.
BLOB:
二进制LOB,存储二进大量的二进制信息.存储时不会进行字符集转换.
CLOB
BLOGORACLE 10G中可存储8TB字节.
BFILE:
二进制文件LOB,只是一个文件指针.具体的文件存储在操作系统中.

二、             存储

create table lob_table

(

id number(10) primary key,

in_lob clob ,

out_lob clob

)

lob (in_lob) store as (enable storage in row)

lob (out_lob) store as (disable storage in row)

使用dbms_metadata来获得它的完整的脚本:
SELECT DBMS_METADATA.GET_DDL( 'TABLE', 'LOB_TABLE' )

FROM DUAL

   CREATE TABLE "NYYTEST"."LOB_TABLE"    

   ("ID" NUMBER(10,0), "IN_LOB" CLOB,  "OUT_LOB" CLOB, 

   PRIMARY KEY ("ID")   USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255   

   STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)   TABLESPACE "TEST"  ENABLE    ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING   STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)   TABLESPACE "TEST"  

   LOB ("IN_LOB") STORE AS (   TABLESPACE "TEST" ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10  NOCACHE LOGGING    STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT))  

   LOB ("OUT_LOB") STORE AS (   TABLESPACE "TEST" DISABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10  NOCACHE LOGGING    STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT))   

1、  表空间

保存lob数据的表空间可以不同于保存表数据的表空间,为LOB数据单独使用一个表空间有利于备份和恢复以及空间管理但是lobindexlobsegment必须在同一个表空间中

2、  IN ROW

ENABLE STORAGE IN ROW

DISABLE STORAGE IN ROW

控制LOB数据是否总与表分开存储(存储在lobsegment中),或是有时可以与表一同存储,而不用单独放在lobsegment中。

如果设置了ENABLE STORAGE IN ROW,而不是DISABLE STORAGE IN ROW,小LOB(最多4,000字节)就会像VARCHAR2一样存储在表本身中。只有当LOB超过了4,000字节时,才会移出lobsegment

默认行为是启用行内存储ENABLE STORAGE IN ROW,如果lob存储的数据大小能在表本身中放下,建议采用内联存储

3、   CHUNK

块(chunk)是逻辑上连续的一组数据库块(block),这也是LOB的最小分配单元。,每个LOB实例(每个行外存储的LOB值)会占用至少一个CHUNK。一个CHUNK有一个LOB值使用,每个chunk的大小应该尽可能与实际lob数据的大小相近,以减少浪费空间;

4、  PCTVERSION

控制lob的读一致性

PCTVERSION控制着用于实现LOB数据版本化的已分配LOB空间的百分比(这些数据库块由某个时间点的LOB所用,并处在lobsegmentHWM以下)。对于许多使用情况来说,默认设置12%就足够了,因为在很多情况下,你只是要INSERT和获取LOB(通常不会执行LOB的更新;LOB往往会插入一次,而获取多次)。因此,不必为LOB版本化预留太多的空间(甚至可以没有)。

不过,如果你的应用确实经常修改LOB,倘若你频繁地读LOB,与此同时另外某个会话正在修改这些LOB12%可能就太小了。如果处理LOB时遇到一个ORA-22924错误,解决方案不是增加undo表空间的大小,也不是增加undo保留时间(UNDO_RETENTION),如果你在使用手动undo管理,那么增加更多RBS空间也不能解决这个问题。而是应该使用以下命令:

ALTER TABLE tabname MODIFY LOB (lobname) ( PCTVERSION n)

增加lobsegment中为实现数据版本化所用的空间大小。

5、  CACHE

控制lobsegment数据是否存储在缓冲区缓存中。默认的NOCACHE指示,每个访问都是从磁盘的一个直接读

ALTER TABLE tabname MODIFY LOB (lobname) ( CACHE );

ALTER TABLE tabname MODIFY LOB (lobname) ( NOCACHE );


转自:http://blog.sina.com.cn/s/blog_7282b74b0100rnqh.html

posted on 2014-03-23 20:00  pengdaijun  阅读(2505)  评论(0)    收藏  举报