Oracle中LOB对象存储访问研究

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:zhf2003168
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:在进行数据库设计时,通常需要保存图片、视频等非结构化信息,采用LOB对象进行存储访问具有效率高、安全性好等优点。
  关键词:Oracle;非结构化数据;LOB;dbms_lob包
  中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2016)21-0006-01
  1引言
  数据库管理系统的应用范围越来越广泛,随着对所需要存储信息的复杂度和多样化的需求越来越高,诸如图片、音视频文件、电子文档、网页、电子邮件等非结构化数据也要求以数据库方式来进行存储。而实际在存储这些信息时,多采用文件管理系统方式将数据存储在目录结构中,只将文件的文件名信息和路径保存在数据库中,没有真正实现采用数据库方式存储。该方式实现起来比较简单,但是没有达到数据的完整性和一致性要求,文件容易被误操作,安全性不高。从数据的可管理性和安全性角度考虑,应该将这些非结构化数据集中存储在数据库中,达到安全高效的管理目的。在数据库中,诸如此类复杂的非结构化数据统称为大对象数据LOB(LargeObjects)[1]。由于LOB比常见的一些数据类型复杂度高,它是长度可变的二进制流或字节流,数据的存储和显示方法不能够像其他常用的数据类型一样,按照常规的处理方式不能实现,比较特殊,因此如何对大对象数据存储和管理显得至关重要。
  2 大对象类型数据
  LOB数据类型专门用于存储包括电子文档、多媒体、电子邮件、网页甚至空间数据等大对象的数据,一般不大于4G字节。Oracle8之前使用LONG、LOBG RAW来实现,现慢慢淘汰,Oracle8开始使用LOB实现。在Oracle中,有4个大对象(LOBS)类型可用,分别是CLOB、BLOB、NCOLB、BFILE[2],分为内部LOB和外部LOB。内部LOB包括CLOB、BLOB、NCOLB;外部LOB包括BFILE。BLOB即Binary Large Object,以二进制数据形式存储在数据库中,最大存储容量4GB。CLOB即Character Large Object,是一种字符数据,存储在数据库中,最大存储容量4GB。BFILE即Binary File,是一种只读型二进制数据,存贮在数据库之外,字段中存储的是文件定位指针.bfile。在Oracle中是只读的,用于将非结构化数据存储在数据库之外的操作系统文件中,最大长度由操作系统限制。NCOLB是基于国家语言字符集的数据类型,用于存储数据库中的固定宽度单字节,也可存储多字节类型的大型数据快,最大存储容量也为4GB。
  3 在Oracle中处理LOB数据类型
  Oracle中可以用多种方法对LOB型数据进行查询访问和增、删、改等操作,比如使用dbms_lob包、调用Oracle Call Interface和使用JDBC等。一般常用的比较简单的也是方便有效的处理方法是使用PL/SQLdbms_lob包[3-4]。dbms_lob包提供了读取大对象数据的过程和函数,功能强大。既可以用来读取内部的LOB对象,也可以用来处理BFILE对象。这里只列出常用的一些函数,如DBMS_LOB.read()用于从LOB数据中读取指定长度数据到缓冲区;DBMS_LOB.substr()函数用于从LOB数据中提取子字符串;DBMS_LOB.getlength()函数用于返回指定LOB数据的长度;DBMS_LOB.append()用于将指定的LOB数据追加到指定的LOB数据后;DBMS_LOB.write()用于将指定数量的数据写入LOB;DBMS_LOB.erase()用于删除LOB数据中指定位置的部分数据;DBMS_LOB.copy()用于从指定位置开始将源LOB复制到目标LOB,通过这些提供的过程和函数可以很方便地操作LOB对象。
  4 存储访问实例
  下面是向Oracle中存储一张图片的实例:
  Grantcreate any directory to scott;
  //为scott用户授权
  CREATE OR REPLACE DIRECTORY IMAGES AS ’D:\picture’;
  //创建存储图片的目录
  CREATE TABLE IMAGE_LOB (
  T_ID VARCHAR2 (5) NOT NULL,
  T_IMAGE BLOB NOT NULL);
  //创建存储图片的表
  CREATE PROCEDURE IMG_INSERT (
  TID VARCHAR2,
  FILENAME VARCHAR2) AS F_LOB BFILE;--文件类型
  B_LOB BLOB;
  BEGIN
  INSERT INTO IMAGE_LOB (T_ID, T_IMAGE)
  VALUES (TID,EMPTY_BLOB ()) RETURN T_IMAGE INTO B_LOB;
  F_LOB:= BFILENAME (’IMAGES’, FILENAME);
  DBMS_LOB.FILEOPEN(F_LOB, DBMS_LOB.FILE_READONLY);
  DBMS_LOB.LOADFROMFILE (B_LOB, F_LOB,DBMS_LOB.GETLENGTH (F_LOB));
  DBMS_LOB.FILECLOSE (F_LOB);
  COMMIT;
  END;
  //创建存储图片的存储过程
  Call IMG_INSERT (’1’,’hello.jpg’);
  //在D:\picture目录下存放一张图片hello.jpg之后,将该图片存入表
  经过测试,使用该存储过程存储访问以LOB对象方式存储的图片查询速度快,效率高,是一个不错的选择。
  5结束语
  文中研究了在Oracle数据库管理系统中对大对象数据的存储与访问技术。通过LOB对象可以实现对数据库中二进制数据的存储与读取,实验证明利用该方式管理图像、音视频等非结构化数据具有较高的效率和较好的安全性。
  参考文献:
  [1]王珊.数据库系统概论[M]. 第4版.北京:高等教育出版社,2006.
  [2]王传胜, 张凌燕.信息集成中大对象的研究与实现[J] .微计算机信息, 2009(18):107-108.
  [3]李晓黎, 刘宗尧.Oracle10g数据库管理与应用系统开发[M].北京:人民邮电出版社, 2007.
  [4]盖国强.循序渐进Oracle——数据库管理、优化与备份恢复[M].北京:人民邮电出版社, 2008.
其他文献
选用6组缝焊工艺参数对铁铬铝复网毡进行焊接实验,观察分析了其接头形貌,测定了焊接接头的力学性能。结果表明,当焊接电极压力达3.6kN时,纤维毡沿压痕处断裂;焊接电流和焊接
本报讯近日,江西开门子肥业股份有限公司售后服务部一行人走访了江西赋春、德兴、弋阳、泾口、幽兰等地白俄罗锌一代多营养水稻专用肥示范田。经过农户四个月的管理,施用白俄
拍摄水下照片?无论是海边还是游泳池,一台三防DC是必不可少的.当然这也不是全部,要想照片出彩,光有设备可是不行的.现在,就让我们来看看本刊体验者在浮潜中使用索尼TX20的体
期刊
现代电子技术的不断发展对汽车工业产生着深远的影响。在90年代初期,电子产品在汽车净成本(Net-Value)中所占的比重约为15%;到90年代末期,该比例已经提升到了30%;而且由此可以
轻声念着:春茶、春茶……似乎整个春天的生机和盎然都迎面冲来。一年四季,茶商们最祈盼的,莫过于春天。茶树冒新芽,预示着一年希望的开始。爱喝茶的人翘首期盼着春天,喝上今
汽车电子技术自20世纪80年代以来,呈现出蓬勃发展的生机,并成为汽车工业发展的重要基石。在汽车电子技术广泛应用过程中,为了更明白易懂地使用专有技术名词,往往同时使用或注
21世纪是一个人才竞争的世界,创新教育势在必行。课堂教学是培养和发展学生创新精神、创新意识、创新思维和创新能力的主阵地,作为一名小学数学教师,特别是一名年轻的农村小
期刊
学位
敦煌学的历史已有一百余年了,各个分支领域都取得了丰硕的成果,而敦煌书法的研究却速远落後於敦煌学中的其他门类。究其原因,除了“物理条件”的限制(主要是大量原件无法看到,连
加大力度,推动深入学习宣传贯彻胡锦涛总书记在中央党校的重要讲话精神,是《山西日报》迎接十七大重点报道在理论宣传方面的中心内容。做好迎接十七大的理论宣传报道,根据我