Oracle数据库中,lob型数据有以下几种:
Lob类型 说明Clob: 和Oracle7的long型相似,clob可以存储单字节型数据Nclob: Nclob存储定宽的多字节国家字符集数据Blob: 和Oracle7中的long raw类型相似。可以存储无结构的二进制数据。Oracle8没有对这种数据进行解释 ,只是按照原来的形式存储和检索它。
Bfile: Bfile允许对Oracle数据库以外存储的大型二进制文件进行只读形式的访问。和其它三种lob类型数据 不同的是,bfile类型数据存储在一个单独的文件中,该文件不由Oracle来维护。
特点:
1.在Oracle7中,相应的long或long raw字段有2g的限制,而lob的限制是4g 。2.lob可以使用调用接口OCI或者由pl/sql利用dbms_lob包进行操纵。3.lob不象long型那样每个表中最多只有一个字段的限制,其可以有多个,而又可以利用触发器的特性。4.lob数据处理可以获得与其它数据同样的事物特性。5.lob的存储比较特殊,它并不是跟其他数据存储在同一个数据库表中,而是可以单独存放于不同的表空间中,由一个定位符指向实际的lob数据。
二、存储海量图像数据的策略
图像数据库技术一直致力于解决海量数字图像的有效存储和管理问题。它是数据库技术的继承和发展,一方面,图像数据和文本数据存在着本质的区别,在文本数据领域得以成功应用的传统数据库技术,如果一成不变的照搬到图像数据库领域,结果往往是低效,甚至无效;另一方面,传统数据库的许多成果,如SQL语言、索引技术等都值得图像数据库借鉴。上述两个方面的结合成为目前图像数据库技术发展的主流。BLOB大对象数据是数据量很大的数据类型,它会占用大量的硬盘空间、内存和网络资源,因此合理地设计包含有BLOB大对象数据类型的属性表,对提高存储效率、查询速度有很大的影响。一般BLOB大对象的设计原则如下:
(1) 尽量不使用BLOB大对象
二进制大对象并不一定要存储为text、ntext或者image数据类型,它们也可以作为varchar或者varbinary数据类型村处在表格中。数据类型的选择要根据将要存储的BLOB的实际大小。如果数据不会超过8K,那么就使用Varchar或者varbinary数据类型。如果这些大对象的尺寸超过8K,那么就使用text、ntext或者image数据类型。
(2)何时使用BLOB数据类型
在下列情况下,我们可能要使用到BLOB数据类型·您要将OLE对象(如图形、声音等)存入您的数据库中;·您要将大型的二进制对象存入您的数据库中;·您所要操纵的文本对象过大,以致于一般的字符串函数无法对其操作;·您所使用数据库的数据类型oracle不能支持,所以您只能使用blob函数对其进行操纵。
(3) 最好将BLOB存储在数据库中
常见的设计问题是将图片存在数据库中还是存在文件系统中。在大多数情况下,最好把图片文件与其它数据一起存在数据库中。因为将影像数据文件存储在数据库中有许多优点:
⑴易于管理。当BLOB与其他数据一起存储在数据库中时,BLOB和表格是数据一起备份和恢复。这样就降低了表格数据与BLOB数据不同步的机会,而且降低了其他用户无意中删除了文件系统中BLOB数据位置的路径和风险。另外,将数据存储在数据库中BLOB和其他数据的插入、更新和删除都在同一个事务中实现。这样就确保了数据的一致性和文件与数据库之间的一致性。还有一点好处是不需要为文件系统中的文件单独设置安全性。
⑵可伸缩性。尽管文件系统被设计为能够处理大量不同大小的对象,但是文件系统不能对大量小文件进行优化。在这种情况下,数据库系统可以进行优化。
⑶可用性。数据库具有比文件系统更多的可用性。数据库复制允许在分布式环境中复制、分配和潜在的修改数据。在主系统失效的情况下,日志转移提供了保留数据库备用副本的方法。当然,在某些情况下,将图片存储在文件系统中将是更好的选择:
(1)使用图片的应用程序需要数据流性能,例如实时的视频重现。(2)象Microsoft PhotoDraw或者Adobe Photoshop这样的应用程序经常访问BLOB,这些应用程序只知道怎样访问文件。(3)需要使用一些NTFS文件系统中的特殊功能,例如远程存储

解决方案 »

  1.   

    用 long 类型 或者 blob 类型
      

  2.   

    当我把字段定义成varcher2时我字段的长度最多只能指定到4000字节.
    当我把字段定义成clob时,当程序执行时会报插入的值过大的错误.
    我要插入的字段的长度时4008字节;
      

  3.   

    我客户端用的是java。我测试过如果执行插入一个小于4000字节的数据是可以执行的。就是当插入的数据大于4000字节的时候会出错。我用的是oracle9i,solaris,jdk1.4.1。
      

  4.   

    我试过long和blog了也不行错误信息为:
    java.sql.SQLException: ORA-01704: string iteral too long
      

  5.   

    数据库传送的文本大小根据Statement.getMaxFieldSize有关。
    超过4000使用流传送。与jdbc有关