lob存储器
‘壹’ db2 lob字段定义
DB2主要应用于大型应用系统,具有较好的可伸缩性,可支持从大型机到单用户环境,应用于所有常见的服务器操作系统平台下。 DB2提供了高层次的数据利用性、完整性、安全性、可恢复性,以及小规模到大规模应用程序的执行能力,具有与平台无关的基本功能和SQL命令。DB2采用了数据分级技术,能够使大型机数据很方便地下载到LAN数据库服务器,使得客户机/服务器用户和基于LAN的应用程序可以访问大型机数据,并使数据库本地化及远程连接透明化。 DB2以拥有一个非常完备的查询优化器而着称,其外部连接改善了查询性能,并支持多任务并行查询。 DB2具有很好的网络支持能力,每个子系统可以连接十几万个分布式用户,可同时激活上千个活动线程,对大型分布式应用系统尤为适用。
LOB(large object)是一种用于存储大对象的数据类型,如医学记录(如X-射线)、视频、图像等。LOB有三种类型:BLOB:Binary Large Object、CLOB:Character Large Object、DBCLOB:Double-byte Character Large Object。每个LOB可以有2GB。
‘贰’ 未锁定含有 LOB 值的行;是什么原因
先说一下怎么用LOB: 在Oracle中,存储在LOB中数据称为LOB的值,如使用Select 对某一LOB字段进行选择,则返回的不是LOB的值,而是该LOB字段的定位器(可以理解为指向LOB值的指针)。如执行如下的SQL语句: DELCARE AUDIO_INFO BLOB; BENGIN SELECT audio INTO AUDIO_INFO FROM view_sites_info WHERE site_id=100; END; 存储在AUDIO_INFO变量中的就是LOB定位器,而不是LOB的值。而要对某一LOB的值进行访问和维护操作,必需通过其定位器来进行。DBMS_LOB包中提供的所有函数和过程都以LOB定位器作为参数。 DBMS_LOB包中主要提供了以下几个过程供用户对内部LOB字段进行维护。 APPEND()将源LOB中的内容加到目的LOB中 COPY()从源LOB中复制数据到目的LOB ERASE()删除LOB中全部或部分内容 TRIM()将LOB值减少到指定的长度 WRITE()向LOB 中写入数据 COMPARE()比较两个同种数据类型的LOB的部分或全部值是否相同 GETLENGTH()获取LOB的长度 READ()从LOB中读出数据 1、 dbms_lobpare( lob_1 IN BLOB/CLOB/BFILE, lob_2 IN BLOB/CLOB/BFILE, amount IN INTEGER:=4294967295,--要比较的字符数(CLOB),字节数(BLOB) offset_1 IN INTEGER:=1,--lob_1的起始位置 offset_2 IN INTEGER:=1--lob_2的起始位置) 比较两个LOB的内容。 4、dbms_lob.( dest_lob IN OUT NOCOPY BLOB/CLOB/NCLOB, src_lob IN BLOB/CLOB/NCOB, amount IN INTEGER, dest_offset IN INTEGER:=1, src_offset IN INTEGER:=1) 从src_lob中,以src_offset为起始位置,截取amount个字符/字节,放到dest_lob的dest_offset位置。 5、dbms_lob.createtemporary( lob_loc IN OUT NOCOPY BLOB/DLOB/NCLOB, cache IN BOOLEAN, r IN PLS_INTEGER:=10) 在用户的临时表空间中,建立临时LOB。 lob_loc:指定LOB定位符。 Cache:是否将LOB读取到缓冲区。 Dur:指定何时清除临时LOB(10:会话结束时。12:调用结束时)。 6、dbms_lob.erase( lob_loc IN OUT NOCOPY BLOB/CLOB/NCLOB, amount IN OUT NOCOPY INTEGER,--字符/字节数 offset IN INTEGER:=1—起始位置 ) 删除LOB变量的内容。 7、dbms_lob.fileclose(file_loc IN OUT NOCOPY BFILE) 关闭打开的BFILE定位符所指向的OS文件 8、dbms_lob.filecloseall关闭当前会话已经打开的所有BFILE文件。 9、dbms_lob.fileexists(file_loc IN BFILE) RETURN INTEGER 确定file_loc对应的OS文件是否存在,1:存在。0:不存在。 10、dbms_lob.filegetname( file_loc IN BFILE, dir_alias OUT varchar2, filename OUT varchar2) 获取BFILE定位符所对应的目录别名和文件名。 11、dbms_lob.fileisopen(file_loc IN BFILE) RETURN INTEGER 确定BFILE对应的OS文件是否打开。 12、dbms_lob.freetemporary(lob_lob IN OUT NOCOPY BLOB/CLOB/NCLOB) 释放在默认临时表空间中的临时LOB。 13、dbms_lob.fileopen(file_loc IN OUT NOCOPY BFILE, Open_mode IN BINARY_INTEGER:file_readonly) 打开文件。 14、dbms_lob.getchunksize(lob_loc IN BLOB/CLOB/NCLOB) RETURN INTEGER 当建立包含CLOB/BLOB列的表时,通过指定CHUNK参数可以指定操纵LOB需要分配的字节数(数据库尺寸的整数倍)默认为数据块的尺寸。 15、dbms_lob.getlength(lob_loc IN BLOB/CLOB/BFILE/NCLOB) RETURN INTEGER 获取长度。 16、dbms_lob.instr( Lob_loc IN BLOB/CLOB/NCLOB/BFILE, Pattern IN RAW/VARCHAR2, Offset IN INTERGER:=1, Nth IN INTEGER:=1) RETURN INTEGER; 返回特定样式数据从LOB某偏移位置开始出现N次的具体位置。 17、dbms_lob.idopen(lob_loc IN BLOB/CLOB/BFILE) RETURN INT 确定LOB是否打开,打开:1,未打开:0。 18、dbms_lob.istemporary(lob_loc IN BLOB/CLOB/NCLOB) RETURN INTEGER 确定定位符是否为临时LOB。 19、dbms_lob.loadfromfile( dest_lob IN OUT NOCOPY BLOB/CLOB, src_file IN FILE, amount IN INTEGER, dest_offset IN INTEGER:=1, src_offset IN INTEGER:=1) 将BFILE的部分或全部内容复制到目标LOB变量。 20、dbms_lob.loadblobfromfile( dest_lob IN OUT NOCOPY BLOB, src_bfile IN BFILE, amount IN INTEGER, dest_offset IN OUT INTEGER, src_offset IN OUT INTEGER) 将BFILE数据装载到BLOB中,并且在装载后取得最新的偏移位置。 21、dbms_lob.open( lob_loc IN OUT NOCOPY BLOB/CLOB/BFILE, open_mode IN BINARY_INTEGER) 打开LOB,open_mode(只读:dbms_lob.lob_readonly,读写:dbms_lob.lob_readwrite). 22、dbms_lob.read( lob_loc IN BLOB/CLOB/BFILE, amount IN OUT NOCOPY BINARY_INTEGER),--IN:要读取的字符数, OUT:实际读取的字符数。 Offset IN INTEGER, Buffer OUT RAW/VARCHAR2—存储数据的变量 ) 将LOB数据读取到缓存区中(变量中)。 23、dbms_lob.substr( Lob_loc IN BLOB/CLOB/BFILE, Amount IN INTEGER:=32762, Offset IN INTEGER:=1) RETURN RAW/VARCHAR2 与字符处理函数SUBSTR()使用方法一样。 24、dbms_lob.trim( Lob_loc IN OUT NOCOPY BLOB/CLOB/NCLOB, Newlen IN INTEGER) 截断LOB到指定长度。 25、dbms_lob.write( Lob_loc IN OUT NOCOPY BLOB/CLOB, Amount IN BINARY_INTEGER, Offset IN INTEGER, Buffer IN RAW/VARCHAR2) 将缓冲区数据写入到LOB中的特定位置。 26、dbms_lob.writeappend( Lob_loc IN OUT NOCOPY BLOB/CLOB/NCLOB, Amount IN BINARY_INTEGER, Buffer IN RAW/VARCHAR2) 将缓冲区数据写到LOB尾部。