0、LARGEOBJECT ORACLE8中有4种LOB -BLOB:BinaryLargeObject -CLOB:CharacterLargeObject -NCLOB:固定长度的多字节CharacterLargeObject -BFILE:DB外部的二进制文件 它们分为两类: 内部LOB:存放在DB内部,包括BLOB,CLOB,BCLOB 外部文件:存放在DB外面,就是BFILE
要注意的是ORACLE8不自动转换这些类型的数据。
1、LONG和LOB的比较 LONG/LONGRAWLOB -------------------------------------------------- 表中只能由一个列可以有多列 最大2G最大4G SELECT返回值SELECT返回指针 存放在DB内可以在DB的内或者外 不支持OBJECT类型支持 顺序存取随机存取 --------------------------------------------------
NCLOB不支持OBJECT类型 LOB小于4000字节时是内部存放
2、LOB解析 LOB有两个不同的部分 -LOB值:LOB代表的数据 -LOB指针:LOB存放数据的位置 LOB列内部不存放数据,而是LOB值的位置。当创建内部LOB时,值存放在LOBSEGMENT中,指向OUT-OF-LIN数据的指针放在列中。对外部LOB,只在列中存放位置。
3、内部LOB 就是存放在DB内部的LOB,包括BLOB,CLOB,NCLOB。它们可以是 用户自定义的类型中的属性 表中某列 SQL变量 程序host变量 PL/SQL中的变量、参数、返回值
内部LOB可以使用ORACLE的并发机制、REDOLOG、RECOVERY机制。 BLOB被ORACLE8解释为二进制位流,类似LONGRAW。 CLOB解释为单字节字符流 NCLOB是固定的多字节字符流,基于DBNATIONAL字符集的字节长度。
例子: CREATETYPEpicture_typASOBJECT(imageBLOB);
CREATETABLEperson_tab (pnameVARCHAR2(20), RESUMECLOB, picturepicture_typ );
上面的语句完成后,数据将存放在5个物理SEGMENT中。 -TABLEperson_tab在缺省TABLESPACE, -RESUME存放的LOBSEGMENT -PICTURE存放的LOBSEGMENT -标示RESUME存放位置的LOBINDEXSEGMENT -标示PICTURE存放位置的LOBINDEXSEGMENT LOBINDEX是隐式创建的。
当INSERT或者OBJECTCACHE中的OBJECT刷新到SERVER时,LOB生成。可以使用DBMS_LOB包和OCI来处理LOB。当ROW删除时,相应的内部LOB也会删除。UPDATE必须处理整个LOB值,不能UPDATE其中的一部分。
4、内部LOB的存储参数 具体语法可以参见ORACLE文档, LOB(lob项,...)STOREASlob_segment_name CHUNKinteger PCTVERSIONinteger CACHE NOCACHELOGGING/NOLOGGING TABLESPACEtablespace_name STORAGEstorage子句 INDEXINDEX字句
lob_segment_name:缺省式LOB$n CHUNK:连续分配在一起的BLOCK数目,存放连续的LOB数据。这些CHUNK的数据存放在LOBINDEX里面,使用内部LOB标示和LOB值作为键。 PCTVERSION:LOB一致读需要的系统空间。一旦LOB申请超过PCTVERSION的值,ORACLE就会收旧的空间并REUSE之。 CACHE:使用SGA区的DBBUFFERCACHE处理LOB的READ/WRITE。 NOCACHELOGGING:不使用SGA区的BUFFER,数据的改变纪录到REDOLOG。 存取LOB比较频繁时,使用CACHE 存取LOB不频繁时,使用NOCACHE NOCACHENOLOGGING:不使用SGA区的BUFFER和REDOLOG
INDEX子句 INDEXlob_index_segtment_name INITTRANSinteger MAXTRANSinteger TABLESPACEtablespace_name STORAGEstorage子句
如果没有设置LOB存储参数和INDEXSTROAGE,则采用如下缺省值 CHUNK=1DB_BLOCK PCTVERSION=10 NOCACHE NOLOGGING
例子: CREATETABLEAPARTMENTS( floor_planBLOB, contractCLOB, nameVARCHAR2(10)) LOB(floor_plan,contract)STORAGEAS( STORAGE(INITIAL100KNEXT100KPCTINCREASE0) CHUNK10 PCTVERSION20 NOCACHE NOLOGGING INDEX(INITIAL100KNEXT100K) );
5、内部LOB的并发 LOB的读一致和其他ORACLE类型一样,但是它是在CHUNK级别上作VERSION的。
6、外部LOB ORACLE8允许定义BFILE类型,可以把外部文件和BFILE对象连接起来,同时能提供BFILE的安全机制。 BFILE对处理不需要transaction控制的OS文件很有用处。 对BFILE的处理需要DBMS_LOB或者OCI。 BFILE必须是READ-ONLY的,文件应该放在ORACLE能存取的地方。如果删除BFILE对象,外部文件并不删除。 例子: CREATETABLEhome_page( EMPLOYEEREFEMPLOYEE_TYP, LAST_UPDATEDATE, HOMEPAGEBFILE);
CREATETYPEpersonal_info_typASOBJECT (EMPLOYEEREFemployee_typ, PICTUREBFILE, THUMBPRINTBFILE, REINAPRINTBFILE );
其实在BFILE对应的列或者属性中存放的是BFILE的位置,即是物理文件的位置。 读BFILE不通过SGA.
7、BFILE的安全 ORACLE8提供安全机制。文件必须和DB在一台机器上,读取不存在文件的timeout由os决定。可以和内部LOB的读取方法一致,但是必须注意:文件的权限、文件系统空间限制、其他对文件的维护、OS允许的最大文件大小。 ORACLE8不对BFILE采取TRANSACTION的支持,ORACLE的BACKUO和RECOVERY也不支持BFILE。
8、目录DIRECTORY 这是ORACLE为了管理BFILE引入的新元素,它指定SERVER文件系统的目录,可以把文件系统的目录抽象为数据库对象,更具有灵活性。 DIRECTORY由DBA建立,系统用户拥有,通过GRANT/REVOKE来确定哪些用户有权限。
CREATEORREPLACEDIRECTORY目录名AS路径名 DROPDIRECTORY目录名
存取BFILE在如下情况时候产生异常: -用户没有操作DIRECTORY的权限 -DIRECTORY所对应的物理目录不存在,或者没有存取该目录的权限。 -文件不存在
文件和权限的检查是在文件存取时候检查的,创建时候并不报错。 不支持逻辑路径
系统新增加了CREATEANYDIRECTORY和DROPANYDIRECTORY。对DIRECTORY授权只有READ。
对CREATEDIRECTORY和GRANTREADONDIRECTORY是可以AUDIT的。
8、DIRECTORY建立的原则 DIRECTORY不要和DBDATAFILE在相同的目录下。 要有选择的赋予CREATEANYDIRECTORY和DROPANYDIRECTORYROLE。 在建立之前要在OS级别上设置权限。 如果移植DB到其他机器,需要注意DIRECTORY的路径是否改变。
9、管理LOB ORACLE通类似文件操作一样的接口:DBMS_LOB,OCI8。同时还有SQL语句的一些支持。 管理LOB的一般方法: 1)CREATE/POPULATE包含LOB的TABLE, 2)在程序中DECLAREANDINITIALIZELOBLocator 3)用SELECTFORUPDATE锁定包含LOB的ROW, 4)用DBMS_LOB或者OCI维护相关LOB值 5)COMMIT
管理BFILE的一般方法 1)建立OS目录,授予ORACLE用户READ的权限 2)把文件放到该目录 3)建立包含BFILE的TABLE 4)建立DIRECTORY,用GRANT授权 5)在TABLE中INSERT与文件相关的值 6)在程序中声明LOBLocator 7)取得包含LOBLocator的行 8)用DBMS_LOB和OCI读取BFILE
10、LOB的操作 可以用SQL、PL/SQL、3GL中嵌入式SQL或者OCI中的变量值直接INSERT到LOB中。
可以用其他的LOB、NULL或者EMPTY_CLOB()/EMPTY_BLOB()的值UPDATELOB。当把一个LOB赋给另一个时,其实是新建了一个LOB。这些操作不需要SELECTFORUPDATE。只有在更新LOB的其中一部分的时候才需要先LOCK。 ORACLE8不会自动转换CLOB和BLOB。 最好的办法是OCILobWrite,以为它使用ORACLE的流机制,最快、使用更好的空间和REDO。
删除LOB的方法 DELETE.... TRUNCATETABLE.... DROPTABLE... 删除后注意在OS级别上删除相关文件。 如果只是要去掉LOB的Locator,可以用NULL或者空字符串''来UPDATE。
11、DBMS_LOB包 DBMS_LOB包用SYS用户提交DBMSLOB.SQL和PRVTLOB.PLB脚本。它们包含在CATPROC.SQL中。用户要授权才能使用它。匿名BLOCK中的DBMS_LOB例程使用当前用户的权限。STOREDPROCEDURE中的DBMS_LOB调用使用其所有者的权限。 它不支持BFILE的并发控制机制。 你必须控制LOB的LOCK,DBMS_LOB不会隐式的LOCKLOB所在的ROW。 DBMS_LOB.LOBMAXSIZE=4G
包含两类操作 1)APPEND、COPY,EARSE,TRIM,WRITE,FILECLOSE,FILECLOSEALL,FILEOPEN,LOADFROMFILE 2)COMPARE,FILEGETNAME.INSTR,GETLENGTH,READ,SUBSTR,FILEEXISTS,FILEISOPEN
DBMS_LOB的任何参数为NULL,则返回值为NULL. 如果目标LOB/BFILE=NULL,将触发异常。 BLOB/BFILE的OFFSET以BYTE为单位,CLOB/NCLOB以字符为单位。且不能为负值,否则会触发异常。缺省OFFSET为1。 参数不能为负值。
PROCEDUREAPPEND(DEST_LOB,SRC_LOB); 把一个LOB加到另一个LOB中。 FUNCTIONCOMPARE(L1,L2,AMOUNT,OFFSET1,OFFSET2) =0,相同 =-1,第一个小 =1,第一个大
12、系统管理方面的问题 EXPORT/IMPORT支持LIBRARY和DIRECTORY,支持LOB。 IMPORT转换EXPORT文件中的CLOB到当前缺省的字符集。NCLOB转换到当前Nationanl字符集。BLOB不转换。 BFILE不能EXP/IMP。只有BFILE的名字和DIRECTORY被EXPORT出来。 (http://www.fanqiang.com) 进入【UNIX论坛】 |
相关推荐
LOB语料库 创建时间: 1970年代初 创建单位:英国Lancaster大学和挪威Oslo大学以及Bergen大学 规模层级: 100万词次 基本情况:研究当代英国英语,与美国英语对比,使用了TAGIT系统,以统计方式建立换算几率矩阵,提高标注...
LOB语料库是模仿Brown语料库的比例建立起来的英国英语语料库,其预料搜集自1961年英国英语出版物上的文本,共500篇,每篇大约2000个单词,合计100万单词。Brown语料库带词性标记,LOB语料库不带词性标记。
oracle dbms_lob
Oracle的LOB(CLOB)大字段以及(SYS_LOB$$)清理.txt
Oracle数据库中LOB的调优.pdf
Oracle LOB字段处理工具是一款简单的lob字段处理工具
sybase IQ LOB手册,这个功能能让你在IQ中村图片和视频
通过spring存blob和clob数据到sybase数据库中,压缩包里包含了三种方式,(1)spring+hibernate,切面事务(aop),存lob数据,(2)spring+hibernate存lob数据,(3)spring+jdbc存lob数据。
分享一个来自官方的对Oracle LOB字段的性能调优。
OCI中有关LOB相关函数使用的样例程序
测试oracle数据库中,lob字段在不同参数条件下,删除数据后占用空间的情况。 测试1 测试disable storage in row下的lob字段 测试2 测试非disable storage in row模式下 该模式为默认模式,既小于4k的数据不会存在lob...
oracle dbms_lob 智能大对象(Blob、Clob)
ORACLE LOB大对象处理.doc ORACLE LOB大对象处理.doc
前端开源库-lobLOB,LOB API包装
lob笔记.doclob笔记.doclob笔记.doc
本文档主要介绍如何对LOB字段进行处理本文档主要介绍如何对LOB字段进行处理
Oracle数据库,更改表空间的命令,包括table、index、lob对象。
SQL Server存储LOB数据的策略与方法.pdf
KM_IKM Oracle Incremental UpdateLOB.xml KM_LKM SQL to SQL LOB(JYTHON).xml 里面包含两个KM 可以直接用
包含了官方权威说明。而且有LOB字段的日常维护总结,方便大家交流学习。