ORACLE的大字段分类

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

oracle大字段问题

0、LARGE OBJECT

ORACLE8中有4种LOB

- BLOB:Binary Large Object

- CLOB:Character Large Object

- NCLOB:固定长度的多字节Character Large Object

- BFILE:DB外部的二进制文件

它们分为两类:

内部LOB:存放在DB内部,包括BLOB,CLOB,BCLOB 外部文件:存放在DB外面,就是BFILE

要注意的是ORACLE8不自动转换这些类型的数据。

1、LONG和LOB的比较

LONG/LONG RAW LOB

--------------------------------------------------

表中只能由一个列可以有多列

最大2G 最大4G

SELECT返回值SELECT返回指针

存放在DB内可以在DB的内或者外

不支持OBJECT类型支持

顺序存取随机存取

--------------------------------------------------

NCLOB不支持OBJECT类型

LOB小于4000字节时是内部存放

2、LOB解析

LOB有两个不同的部分

- LOB值:LOB代表的数据

- LOB指针:LOB存放数据的位置

LOB列内部不存放数据,而是LOB值的位置。当创建内部LOB时,值存放在LOB SEGMENT中,指向OUT-OF-LIN数据的指针放在列中。对外部LOB,只在列中存放位置。

3、内部LOB

就是存放在DB内部的LOB,包括BLOB,CLOB,NCLOB。它们可以是

用户自定义的类型中的属性

表中某列

SQL 变量

程序host变量

PL/SQL中的变量、参数、返回值

内部LOB可以使用ORACLE的并发机制、REDO LOG、RECOVERY 机制。

BLOB被ORACLE8解释为二进制位流,类似LONG RAW。

CLOB解释为单字节字符流

NCLOB是固定的多字节字符流,基于DB NATIONAL字符集的字节长度。

例子:

CREATE TYPE picture_typ AS OBJECT (image BLOB);

CREATE TABLE person_tab

( pname VARCHAR2(20),

RESUME CLOB,

picture picture_typ

);

上面的语句完成后,数据将存放在5个物理SEGMENT中。

- TABLE person_tab在缺省TABLESPACE,

- RESUME存放的LOB SEGMENT

- PICTURE存放的LOB SEGMENT

- 标示RESUME存放位置的LOB INDEX SEGMENT

- 标示PICTURE存放位置的LOB INDEX SEGMENT

LOB INDEX是隐式创建的。

当INSERT或者OBJECT CACHE中的OBJECT刷新到SERVER时,LOB生成。可以使用DBMS_LOB包和OCI来处理LOB。当ROW删除时,相应的内部LOB也会删除。UPDATE必须处理整个LOB值,不能UPDATE其中的一部分。

4、内部LOB的存储参数

具体语法可以参见ORACLE文档,

LOB ( lob项,...)STORE AS lob_segment_name

CHUNK integer

PCTVERSION integer

CACHE

NOCACHE LOGGING/NOLOGGING

TABLESPACE tablespace_name

STORAGE storage子句

INDEX INDEX字句

lob_segment_name:缺省式LOB$n

CHUNK:连续分配在一起的BLOCK数目,存放连续的LOB数据。这些CHUNK的数据存放在LOB INDEX里面,使用内部LOB标示和LOB值作为键。

PCTVERSION:LOB一致读需要的系统空间。一旦LOB申请超过PCTVERSION的值,ORACLE就会收旧的空间并REUSE之。CACHE:使用SGA区的DB BUFFER CACHE处理LOB的

READ/WRITE。

NOCACHE LOGGING:不使用SGA区的BUFFER,数据的改变纪录到REDO LOG。

存取LOB比较频繁时,使用CACHE

存取LOB不频繁时,使用NOCACHE

NOCACHE NOLOGGING:不使用SGA区的BUFFER和REDO LOG INDEX子句

INDEX lob_index_segtment_name

INITTRANS integer

MAXTRANS integer

TABLESPACE tablespace_name

STORAGE storage子句

如果没有设置LOB存储参数和INDEX STROAGE,则采用如下缺省值

CHUNK=1 DB_BLOCK

PCTVERSION=10

NOCACHE

NOLOGGING

例子:

CREATE TABLE APARTMENTS (

floor_plan BLOB,

contract CLOB,

name VARCHAR2(10))

LOB (floor_plan, contract)STORAGE AS(

STORAGE (INITIAL 100K NEXT 100K PCTINCREASE 0)

相关文档
最新文档