1) BLOB
二进制LOB。用于存储大量的二进制信息,不会进行字符集转换。
允许存储最多(4GB)×(创建LOB时指定的CHUNK参数,默认为数据库块大小)字节的数据。
2) CLOB
字符LOB。这种类型用于存储大量的文本信息,要进行字符集转换。
允许存储最多(4GB)×(创建LOB时指定的CHUNK参数,默认为数据库块大小)字节的数据。
3) NCLOB
存储用Unicode编码的信息,而且像CLOB一样,这些信息要进行字符集转换。
允许存储最多(4GB)×(创建LOB时指定的CHUNK参数,默认为数据库块大小)字节的数据。
NCLOB中存储按照NLS_NCHAR_CHARACTERSET参数指定的字符集来编码的数据。
4)BFILE
允许在数据库列中存储一个Oracle目录对象(操作系统目录的一个指针)和一个文件名,并读取这个文件。
实际上允许以一种只读的方式访问数据库服务器上可用的操作系统文件,就好像它们存储在数据库表本身中一样。
BLOB,CLOB和NCLOB
CLOB、BLOB和NCLOB在数据库中的存储,还有创建时的参数选项都是类似的。
可以看到为CLOB创建了2个段,即LOBINDEX和LOBSEGMENT。
LOBINDEX用于执行LOB的导航。创建一个LOB列时,一般来说,存储在行中的这是一个指针(pointer),或LOB 定位器(LOB locator)。
当查询时,将对LOBINDEX使用LOB定位器来找出这些字节存储在哪里,然后再访问LOBSEGMENT。
通过下面语句可以查看LOB可用的属性有哪些。
1)STORE AS [BASICFILE/SECUREFILE]
指定BASICFILE/SECUREFILE是11g之后增加的特性。默认为BASICFILE,这也是11g之前的唯一选择。
与高级压缩选项或者高级安全选项结合使用时,SECUREFILE可以提供更多选择(压缩,加密,消除复制)
2)LOB表空间
指定存储LOBINDEX和LOBSEGMENT的表空间。
基于管理和性能的考虑,需要为LOB数据另外指定一个表空间。
LOB数据庞大,另外分配一个表空间有利于备份,恢复,空间管理。
默认情况下,LOB数据不在缓冲区缓存中进行缓存,每次访问都会带来一个物理I/O,这种情况下,把LOB数据单独储存到一个磁盘上就非常有意义。
3)ENABLE/DISABLE STORAGE IN ROW
控制是否将LOB数据和表分开存储。如果使用ENABLE STORAGE IN ROW,这也是默认行为,对于小的LOB(最多4000字节),就会像VARCHAR2一样直接存储在表中,这会带来性能上的提高。
4)CHUNK
LOB存储在CHUNK中;指向LOB数据的索引会指向各个CHUNK。
CHUNK是逻辑上连续的一组数据库块(block),这也是LOB的最小分配单元,而通常数据库的最小分配单元是数据库块。
CHUNK大小必须是数据库块大小的整数倍。
CHUNK大小必须合适。如果过大,会造成空间浪费;如果过小,会造成CHUNK数很多,这就会造成LOBINDEX很大,降低性能。
5)RETENTION/PCTVERSION
LOB实现读一致性(http://blog.csdn.net/fw0124/article/details/6899246)的方式和一般的表数据有所不同。
LOBINDEX会像其他段一样生成UNDO,但是LOBSEGMENT并不使用UNDO来记录其修改,而是直接在LOBSEGMENT本身中维护数据的版本。
修改一个LOB时,Oracle会分配一个新的CHUNK,并且仍保留原来的CHUNK。如果回滚了事务,对LOB索引所做的修改会回滚,索引将再次指向原来的CHUNK。
Oracle使用LOBINDEX的读一致视图来撤销对LOB的修改,从而获得读一致性。
RETENTION子句告诉Oracle按照UNDO_RETENTION参数来决定将修改过的LOB历史数据保存在LOBSEGMENT中多久的时间。
PCTVERSION子句控制着用于保存修改过的LOB历史数据的存储空间占已分配LOB空间的百分比。
6)CACHE/CACHE READS/NOCACHE
默认为NOCACHE,LOB数据不在缓冲区缓存中进行缓存,每个访问都是对磁盘直接读写。
CACHE READS允许缓存从磁盘读的LOB数据,但是LOB数据的写操作直接写至磁盘。
CACHE则允许读和写时都能缓存LOB数据。
对于频繁读写,并且较小的LOB,比较适合使用缓存。
BFILE
BFILE类型只是操作系统上一个文件的指针。它用于为这些操作系统文件提供只读访问。
可以使用dbms_lob包,把BFILE当成一个LOB来处理。
不过需要注意的是,如果要从BFILE中加载文字数据,需要注意字符集问题。
为此可以使用DBMS_LOB.LOADCLOBFROMFILE过程,它的bfile_csid参数用来指定BFILE的character set id。
可以用下面的语句查询所使用的字符集对应的character set id。
select nls_charset_id(value) charset_id, value charset_name
from v$nls_valid_values where parameter = 'CHARACTERSET'
order by value;
例如,通过上面语句查到ZHS16GBK对应的id是852。
在D盘根目录下建立文件test.txt,存入文字,当前是中文系统,因此默认是中文(ZHS16GBK)编码方式。
下面来从此文件读入文本到一个CLOB对象中。
分享到:
相关推荐
3.4 数据文件...............................................................................179 3.4.1 简要回顾文件系统机制..........................................................180 3.4.2 Oracle...
Oracle数据库中LOB的调优.pdf
oracle dbms_lob
Oracle LOB字段处理工具是一款简单的lob字段处理工具
ORACLE LOB大对象处理.doc ORACLE LOB大对象处理.doc
Oracle的LOB(CLOB)大字段以及(SYS_LOB$$)清理.txt
7、LOB数据类型用于存储大型的,没有被结构化的数据,例如二进制文件,图片文件,LOB主要分为BLOB和CLOB,BLOB数据类型用于存储二进制对象:图像,音频,视频...CLOB数据类型用于存储字符格式的大型对象 8、ORACLE...
用过Oracle的人都知道,Oracle有一种数据类型叫VARCHAR2,用来表示不定长的字符串。VARCHAR2也是Oracle公司推荐使用的类型。但使用VARCHAR2有个问题:最大只能表示4000个字符,也就相当于2000个汉字。如果你的程序中...
分享一个来自官方的对Oracle LOB字段的性能调优。
oracle dbms_lob 智能大对象(Blob、Clob)
包含了官方权威说明。而且有LOB字段的日常维护总结,方便大家交流学习。
NULL 博文链接:https://surfingforrest.iteye.com/blog/711612
ORACLE中的数据类型.doc 当你在数据库中创建数据表的时候,你需要定义表中所有字段的类型。ORACLE有许多种数据类型以满足你的需要。数据类型大约分为:character, number, date, LOB, 和RAW等类型。虽然ORACLE8i也...
Laravel开发-eloquent-serialized-lob 雄辩的序列化LOB是允许序列化LOB模式的Laravel5雄辩模型的特征。
lob笔记.doclob笔记.doclob笔记.doc
前端开源库-lobLOB,LOB API包装
测试oracle数据库中,lob字段在不同参数条件下,删除数据后占用空间的情况。 测试1 测试disable storage in row下的lob字段 测试2 测试非disable storage in row模式下 该模式为默认模式,既小于4k的数据不会存在lob...
eslint-config-lob Lob存储库的 用法 安装eslint和以下模块: npm i eslint eslint-config-lob --save-dev 使用以下对象在项目的根目录中创建一个.eslintrc文件: { extends : "eslint-config-lob" } 这将使用...
cx_Oracle.LOB类型数据转化成字典方法 def cxOracleolbTrasferDict(dbsearchresult): readstr = "" for i in dbsearchresult.read(): readstr = readstr + i responsedict = eval(readstr) return ...