Oracle数据库lob大对象数据类型字段总结,值得收藏

原创 波波说运维 2019-07-11 00:02:00
https://www.toutiao.com/i6710894326970335757/

概述

今天主要对Oracle数据库lob大对象数据类型字段的详细讲解,介绍ORACLE提供的CLOB,NCLOB,BLOB,BFILE共四种LOB类型。


LOB概念

lob为Oracle数据库的一个大对象数据类型,可以存储超过4000bytes的字符串,二进制数据,OS文件等大对象信息.最大可存储的容量根oracle的版本和oracle 块大小有关.


LOB分类

分为内部LOB和外部LOB。内部LOB包括CLOB、BLOB、NCOLB;外部LOB包括BFILE

内部LOB的数据存储在数据库中,并且支持事务操作(提交、回退、保持点);外部LOB的数据存储在OS文件中,并且不支持事务操作

CLOB(存放大字符数据)用于存储大批量字符数据,

BLOB(存放大二进制数据)用于存放音频、图像、图像,

NCLOB(存放大字符数据)用于存储大批量字符数据,

BFILE(存储指向OS文件的指针)用于存储电影文件。


LOB应用场景

LOB除了可以用在TABLE中定义列的类型外,还可以用来存储XML数据,ORACLE的集合类型,看下面的例子:

1) create table lobtest(a varchar2(20), b clob, c blob) tablespace users; –lob表的定义

2) LOB存储集合类型

上面定义了一个用lob存储varray类型数据的例子.


LOB段属性

默认情况下,当定义了含有LOB字段的table后, oracle会自动为每个LOB创建两个段,lob segment和lob index segment. lob segment存储了每个lob的具体的值,而lob index segment则存储了每个lob值的地址.lob segment、lob index segment和table segment存储在同一个表空间中。

oracle为lob段提供了单独的段属性.在创建table时可以定义将lob和table分别存储在不同的表空间中。平常定义lob时,我们必须考虑以下几个比较重要的属性:

chunk:比oracle block size更大的一种逻辑块,专用于LOB数据的存储,默认为db_block_size的大小,如果手动定义必须定义为db_block_size的倍数.最大不能超过32K。不合理的chunk定义不及浪费存储空间,而且还会影响性能.那么在定义前必须了解应用, 每个LOB列的数据的平均大小,尽量减少LOB的空间浪费。

disable/enable storage in row: 默认情况下为enable storage in row, 在没有分离lob段的情况下,table中的每行数据都存储在同一个block中,这样如果lob列很大时,可能会造成严重的行链接;当lob段和table段分离的情况下,oracle会自动将小于4k的lob数据存储在table segment,将大于4k的lob数据存储在lob段.如果设置为 disable storage in row的情况时,在lob段和table段分离的情况下, 不管lob数据多大,oracle都会将lob数据存储在lob段,这样就出现了上面的

3500 disable storage in row 32 KB ,32 KB ,10情况,浪费了90%的存储空间.

pctversion n /retention:这两个属性用来解决lob段的一致性读问题。lob的特殊性决定它不能使用undo/rollback segment来管理自己的更新的old version,通常lob会在自己所在的表空间中划分一部分空间来管理自己的undo,保证read consistent.lob中更新原理是在lob segment中分配新的chunk插入新的数据,保留旧的镜像,如果一个数据有多个更新存在的话, 那么就会存在多个版本.pctversion用来定义lob segment中undo区域的大小,pctverision 是一个百分比,定义所有lob空间用来存放前镜像的百分比,如果前镜像使用空间超过这个百分比了,oracle不自动扩展这部分的大小, 会重用这些前镜像的空间.如果一个lob segment段的更新很频繁的情况下,那么该lob段的增长可能会很快.retention是9i的新参数, 只能用在tablespace采用ASSM的情况,在lob更新的时候,前镜像会保留一段时间, 具体的时间由undo_retention参数决定.决定采用乃种undo 方式,必须对应用测试后在决定.

nocache/cache reads/cache:定义LOB的cache 方式,nocache为不cache任何 lob数据;cache reads为在lob read的情况下cache数据;cache为读写都cache数据.


LOB可以在SQL环境操作吗?

LOB可以像使用其他数据类型一样,可以进行DML操作.

从上面的例子可以查看,BLOG和BFIEL 是不能直接在sqlplus显示的.


可操作LOB的API

PL/SQL可以用DBMS_LOB操作任何的LOB,BFILE对象,Oracle还提供了OCI编程接口操作LOB。Java,C#都提供了相应的API操作LOB。

怎样将其他字符类型转换成CLOB,二进制类型转换成BLOB?

通过TO_CLOB可以将CHAR,NCHAR,VARCHAR2,NVARCHAR2,NCLOB类型转换成CLOB;

通过TO_LOB可以将LONG RAW转换成BLOB,LONG转换成CLOB;

通过TO_NCLOB可以将CHAR,NCHAR,VARCHAR2,NVARCHAR2,CLOB转换成NCLOB。


LOB对象可以db link远程操作吗?

除了BFILE,CLOB,BLOB可以局部的访问和操作远程LOB对象.目前下列操作是允许的:

  • CREATE TABLE AS SELECT …FROM table@remote;
  • INSERT INTO .. SELECT * FORM table@remote;
  • UPDATE …SET .. = (SELECT ..FROM table@remote);
  • INSERT INTO TABLE@REMOTE(…) AS SELECT * FROM LOCAL_TABLE;
  • UPDATE remote@table SET .. = (SELECT .. FROM local_table);
  • DELETE FROM remote@table WHERE …..

LOB相关的SQL function和DBMS_LOB不允许访问和操作远程的LOB对象。


LOB列可以索引吗?

目前CLOB列支持Oracle Text Index,Domain Index,Function-Base Index,Extensible Index.


LOB支持分区表吗?

可以在分区表使用LOB列,并且还支持exchange partition,move partition,merge partition等操作.


LOB支持Index-organization table吗?

oracle支持在index-organization table中创建clob,blog和bfile列, 但不支持在分区的index-organization table中创建lob列.

[转帖]Oracle数据库lob大对象数据类型字段总结,值得收藏的更多相关文章

  1. 关于oracle数据库(4)数据类型

    数据类型 字符数据类型char:固定长度字符串,最大可以存放2000字节 字符串varchar2:可变长度字符串,最大可以存放2GB数值类型数据 数字number:可以存放整数.浮点数.实数 numb ...

  2. JavaEE JDBC 读写LOB大对象

    JDBC 读写LOB大对象 @author ixenos LOB 除了数字.字符串和日期之外,许多数据库还可以存储大对象,例如图片或其他数据, 在SQL中,二进制(字节型)大对象称为BLOB,字符型大 ...

  3. Oracle LOB 大对象处理

    LOB类型列主要是用来存储大量数据的数据库字段,最大可以存储4G字节的非结构化数据. 一.LOB数据类型分类 1.按存储数据的类型分: ①字符类型:   CLOB:存储大量 单字节 字符数据.   N ...

  4. LINUX下为ORACLE数据库设置大页--hugepage

    在Linux中配置hugepage可以提高oracle的性能,减少oracle sga的页交换,类似于aix中的lagepage. 为什么 使用大页? LINUX内存的默认块大小是4K如果SGA为:1 ...

  5. 转:// LINUX下为ORACLE数据库设置大页--hugepage

    一.在解释什么情况下需要开启大页和为啥需要开启大页前先了解下Linux下页的相关的知识:以下的内容是基于32位的系统,4K的内存页大小做出的计算1)目录表,用来存放页表的位置,共包含1024个目录en ...

  6. [转帖]Oracle 数据库官方不支持VMWare

    Oracle 数据库官方不支持VMWare [日期:2014-05-13] 来源:Linux社区  作者:myhuaer [字体:大 中 小]   https://www.linuxidc.com/L ...

  7. oracle数据库 操作clob对象

    clob类型,但对于这个类型处理起来还是比较麻烦的,varchar2长度为4000bytes,如果varchar2能满足楼主的需求,建议使用varchar2,下面提供了在Java 中读取clob类型的 ...

  8. Oracle数据库十大常见性能问题

    错误的连接管理 oracle的连接是耗时耗力的操作,不应像sqlserver那样使用连接 错误的使用游标和共享池 一般是没有使用绑定变量 不好的SQL语句 使用大量资源的SQL语句都应该好好检查是否可 ...

  9. 使用 hibernate 存取大对象数据类型(clob和blob)

    数据库表如下: book表 id 该表的主键.number类型. photo 代表图书的图片,blob类型. description 图书的描述,clob类型. 使用 hibernate3 往 boo ...

随机推荐

  1. AC自动机1030 [JSOI2007]文本生成器

    /*Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章――― ...

  2. P/NP问题

    目录 P NP NPC NPH 写在开头 1.多项式 如公式:y = axn-bxn-1+c.Ο(log2n).Ο(n). Ο(nlog2n).Ο(n2)和Ο(n3)称为多项式时间.Ο(2n)和Ο(n ...

  3. firewalld命令集--firewall-cmd

    Linux上新用的防火墙软件,跟iptables差不多的工具 补充说明 firewall-cmd 是 firewalld的字符界面管理工具,firewalld是centos7的一大特性,最大的好处有两 ...

  4. Centos7 安装Redis,报错[adlist.o] Error jemalloc/jemalloc.h: No such file or directory

    redis官网 https://redis.io/download 安装 $ wget http://download.redis.io/releases/redis-5.0.4.tar.gz $ t ...

  5. Poseidon 系统是一个日志搜索平台——认证看链接ppt,本质是索引的倒排列表和原始日志数据都存在HDFS,而文档和倒排的元数据都在NOSQL里,同时针对单个filed都使用了独立索引,使用MR来索引和搜索

    Poseidon 系统是一个日志搜索平台,可以在百万亿条.100PB 大小的日志数据中快速分析和检索.360 公司是一个安全公司,在追踪 APT(高级持续威胁)事件,经常需要在海量的历史日志数据中检索 ...

  6. Apache Flink - Window

    Window: 在Streaming中,数据是无限且连续的,我们不可能等所有数据都到才进行处理,我们可以来一个就处理一下,但是有时我们需要做一些聚合类的处理,例如:在过去的1分钟内有多少用户点击了我们 ...

  7. 搭建JavaWeb应用开发环境——Tomcat服务器

    学习web开发,需要先安装一台web服务器,然后再在web服务器中开发相应的web资源,供用户使用浏览器访问. 搭建JavaWeb应用开发环境——Tomcat服务器 1.疑问:学习web开发,为什么必 ...

  8. Qt之模型/视图(实时更新数据)

    上两节简单介绍了Qt中对于模型/视图的编程,大部分助手里说的很清楚了,现在就开始实战部分吧! 在实际应用中,视图展示的数据往往并非一成不变的,那么如何实时更新成了一个很重要的问题!功能:(1)添加委托 ...

  9. https://en.wikipedia.org/wiki/Green_threads

    https://en.wikipedia.org/wiki/Green_threads

  10. ISO/IEC 9899:2011 条款6.4.7——头文件名

    6.4.7 头文件名 语法 1.header-name: <  h-char-sequence  >         "  q-char-sequence  " h-c ...