oracle大字段问题
0、LARGE OBJECT
ORACLE8中有4种LOB
- BLOB:Binary Large Object
- CLOB:Character Large Object varchar2最大长度
- NCLOB:固定长度的多字节Character Large Object
- BFILE:DB外部的二进制文件
它们分为两类:
内部LOB:存放在DB内部,包括BLOB,CLOB,BCLOB
外部文件:存放在DB外面,就是BFILE
ORACLE8中有4种LOB
- BLOB:Binary Large Object
- CLOB:Character Large Object varchar2最大长度
- NCLOB:固定长度的多字节Character Large Object
- BFILE:DB外部的二进制文件
它们分为两类:
内部LOB:存放在DB内部,包括BLOB,CLOB,BCLOB
外部文件:存放在DB外面,就是BFILE
要注意的是ORACLE8不自动转换这些类型的数据。
1、LONG和LOB的比较
LONG/LONG RAW LOB
--------------------------------------------------
LONG/LONG RAW LOB
--------------------------------------------------
表中只能由一个列 可以有多列
最大2G 最大4G
SELECT返回值 SELECT返回指针
存放在DB内 可以在DB的内或者外
不支持OBJECT类型 支持
顺序存取 随机存取
--------------------------------------------------
最大2G 最大4G
SELECT返回值 SELECT返回指针
存放在DB内 可以在DB的内或者外
不支持OBJECT类型 支持
顺序存取 随机存取
--------------------------------------------------
NCLOB不支持OBJECT类型
LOB小于4000字节时是内部存放
LOB小于4000字节时是内部存放
2、LOB解析
LOB有两个不同的部分
- LOB值:LOB代表的数据
- LOB指针:LOB存放数据的位置
LOB列内部不存放数据,而是LOB值的位置。当创建内部LOB时,值存放在LOB SEGMENT中,指向OUT-OF-LIN数据的指针放在列中。对外部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中的变量、参数、返回值
就是存放在DB内部的LOB,包括BLOB,CLOB,NCLOB。它们可以是
用户自定义的类型中的属性
表中某列
SQL 变量
程序host变量
PL/SQL中的变量、参数、返回值
内部LOB可以使用ORACLE的并发机制、REDO LOG、RECOVERY机制。
BLOB被ORACLE8解释为二进制位流,类似LONG RAW。
CLOB解释为单字节字符流
NCLOB是固定的多字节字符流,基于DB NATIONAL字符集的字节长度。
BLOB被ORACLE8解释为二进制位流,类似LONG RAW。
CLOB解释为单字节字符流
NCLOB是固定的多字节字符流,基于DB NATIONAL字符集的字节长度。
例子:
CREATE TYPE picture_typ AS OBJECT (image BLOB);
CREATE TYPE picture_typ AS OBJECT (image BLOB);
CREATE TABLE person_tab
( pname VARCHAR2(20),
RESUME CLOB,
picture picture_typ
);
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是隐式创建的。
- 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字句
具体语法可以参见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之。
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
NOCACHE LOGGING:不使用SGA区的BUFFER,数据的改变纪录到REDO LOG。
存取LOB比较频繁时,使用CACHE
存取LOB不频繁时,使用NOCACHE
NOCACHE NOLOGGING:不使用SGA区的BUFFER和REDO LOG
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论