何为LOB?

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

有那几种可供选择的LOB类型?

目前ORACLE提供了CLOB,NCLOB,BLOB,BFILE共四种LOB类型,CLOB,NLOB为大字符串类型,NLOB为多语言集字符类型,类似于NVARCHAR类型,用他们代替以前的LONG类型;BLOG为大二进制类型,用来代替以前的LONG RAW类型;BFILE可存储操作系统中的各种文件.

何为Internal LOBs 、External LOBs?

Internal LOBs指的是LOB数据存储在oracle的tablespace中,CLOB,NCLOB,BLOG都是Internal LOBs; 而External LOBs指的是LOB数据存储在数据库外部的操作系统文件中,BFIEL是唯一的External LOBs.BFILE提供了让我们可以在SQL中访问外部文件的方法.

LOB到底能存多大的数据呢?

BFILE :Maximum size: 4 GB  Maximum size of a file name: 255 characters  Maximum size of a directory name: 30characters Maximum number of open BFILEs: The maximum number of BFILEs is limited by the value of theSESSION_MAX_OPEN_FILES initialization parameter, which is itself limited by the maximum number of open files the operating system will allow.
BLOB: Maximum size: (4 GB - 1) * DB_BLOCK_SIZE initialization parameter (8 TB to 128 TB)  The number of LOB columnsper table is limited only by the maximum number of columns per table (that is,10001).
CLOB: Maximum size: (4 GB - 1) * DB_BLOCK_SIZE initialization parameter (8 TB to 128 TB) The number of LOB columnsper table is limited onlyby the maximum number of columns per table (that is,10001).
NCLOB :Maximum size: (4 GB - 1) * DB_BLOCK_SIZE initialization parameter (8 TB to 128 TB) The number of LOB columnsper table is limited only by the maximum number of columns per table (that is,10001).

LOB可以用在什么地方?

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

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

2) LOB存储集合类型

create tablespace person_lob datafile size 102464K autoextend on next 100M maxsize 1024000K extent management local uniform size 1M segment space management auto;
/
alter user mayp quota unlimited on person_lob;

create or replace type person_att is object(id number(5),name varchar2(30),sex varchar2(1),age number(5,2));
/
create or replace type person_atts is varray(5) of person_att;
/
create table person(person_id number(5),attribute1 person_atts)
varray attribute1 store as lob person_attribute(
tablespace person_lob
enable storage in row
chunk 16384
pctversion 5
cache reads
index person_lob_idx)
tablespace users
pctfree 0
/
上面定义了一个用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的空间浪费.看下面的表格能说明一切:

  Data Size                     CHUNK Size    Disk Space Used to Store the LOB  Space Utilization(Percent)3500 enable storage in row    irrelevant    3500 in row                        100  3500 disable storage in row   32 KB         32 KB                              103500 disable storage in row   4 KB          4 KB                               90  33 KB                         32 KB         64 KB                              512 GB +10                      32 KB         2 GB + 32 KB                       99+

上面表格用一些数据说明了chunk跟数据之间的存储关系,更形象的说明了磁盘空间的利率问题。 红色标记的部分说明了不合理的chunk定义.必须注意到的LOB中比chunk浪费的空间是不可以重用的.

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创建的例子:
create table person_new(id number(5),name varchar2(30),remark clob,photo blob not null)
lob (remark) store as person_remark(
tablespace person_lob
enable storage in row
chunk 8192
pctversion 2
cache reads
index person_remark_idx)
lob (photo) store as person_photo(
tablespace person_lob
disable storage in row
chunk 16384
pctversion 2
cache reads
index person_photo_idx)
tablespace users
pctfree 10
/

LOB可以在SQL环境操作吗?

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

insert into person_new values(1,’robin.ma’,'he is a goold boy’,empty_blob());

update person_new set remark=’he is a goog boy,he is from Beijing China’ where id = 1;

delete from person_new where id = 1;

commit;

create table bfile_test(files bfile) tablespace users;

insert into bfile_test values(bfilename(’EXPORT’,'c.dat’));

commit;

SQL> select * from bfile_test;
SP2-0678: Column or attribute type can not be displayed by SQL*Plus
SQL> select * from person_new;
SP2-0678: Column or attribute type can not be displayed by SQL*Plus

SQL> select remark from person_new;

REMARK
——————————————————————————–
he is a goog boy,he is from Beijing China

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

可以操作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 Database Application Developer’s Guide - Large Objects 10g Release 2 (10.2)

转载于:https://blog.51cto.com/11106335/1861881

oracle lob 简单介绍相关推荐

  1. python连接oracle用法_【Python Oracle】使用cx_Oracle 连接oracle的简单介绍

    连接数据库的几种方式: 语法: cx_Oracle.connect('username','pwd','IP/HOSTNAME:PORT/TNSNAME') import cx_Oracle db1= ...

  2. Oracle索引简单介绍与示例

    索引的三大特性 1索引高度 在SQL检索数据(SELECT)的时候,索引的高度的不同对检索的效率有明显的差别,数据库访问索引需要读取的数据块通常是索引的高度+1个数据块数,也就是说索引的高度越高,访问 ...

  3. oracle dbms_crypto,dbms_crypto函数包的简单介绍

    dbms_crypto函数包的简单介绍[@more@] dbms_crypto是系统函数包,创建在sys用户下.提供了加密.解密数据的接口,支持多种行业标准的加密与哈希算法,包括AES(the Adv ...

  4. Oracle with子句的简单介绍.

    在ocp题库中有一题是关于with语句的. Which statements are true regarding the usage of the WITH clause in complex co ...

  5. Oracle connet by prior 关键字的简单介绍和用法

    简单来讲,   connect by piror 这个关键字是用来保存树结构的关系表的. 一, 树结构简单介绍 这里都简单解释一下树结构,   所谓树就是里面的成员除了最上级的成员外,  有且只有一个 ...

  6. jert oracle 统计说明,Oracle JET简单入门(一)Oracle JET介绍

    Oracle JET (Oracle Javascript Extension Toolkit)是一款 Oracle 的 JavaScript 拓展工具包.简单来说 Oracle JET 是一个一堆好 ...

  7. 各种Oracle索引类型介绍

    各种Oracle索引类型介绍 逻辑上: Single column 单行索引 Concatenated 多行索引 Unique 唯一索引 NonUnique 非唯一索引 Function-based函 ...

  8. Oracle高级队列介绍

    原始链接:http://www.oracle-developer.net/display.php?id=411 oracle高级队列介绍 高级队列Advanced Queuing(AQ)在oracle ...

  9. Oracle10g SQL tune adviser简单介绍【转自ITPUB zhouwf0726】

    Oracle10g SQL tune adviser Oracle10g SQL tune adviser简单介绍 本文简单介绍下SQL Tuning Adviser的配置使用方法和一些相关知识点,如 ...

最新文章

  1. Exchange服务器系列课程之六--维护邮件服务器(一)
  2. js 拉勾网效果_Node.js 中实践基于 Redis 的分布式锁实现
  3. 人工智能实现a*算法解决八数码_小白带你学回溯算法
  4. 由控制台输入年龄-不同类型不能直接比较
  5. 六、 跨多个WebService管理Session
  6. 设计模式(中介者模式-对象去耦)
  7. 进阶程序员都不会急于学习编程语言,知道原因吗?
  8. Coverity软件下载安装使用试用
  9. vnc远程,在windows下如何实现vnc远程
  10. 解决.NET报错【80040154 没有注册类】的问题
  11. 防止系统自动锁屏脚步
  12. 使用SubstanceDesign和Unity插件ShaderForge制作风格化火焰
  13. USACO-Preface Numbering
  14. linux shell 三元运算符,语法 - Bash中的三元运算符(?:)
  15. 把时间沉淀到自己的热爱里 | Kagol 的 2022 年终总结
  16. 基于python的MODIS数据质量控制------以MOD11A1为例
  17. 国内物流公司通用Material Number Range
  18. pdb文件及引发的思考
  19. c语言如何判断最小公倍数,c语言如何求最大公约数和最小公倍数?
  20. HDC.Cloud 2021|华为云数据使服务DAYU,加速数据价值释放

热门文章

  1. js 对动态添加的table 排序
  2. VS无法读取项目文件?
  3. 第一代计算机到第四代计算机基本知识,[Ch01_计算机系统基本知识.ppt
  4. 仓储rfid文件_RFID智能仓储管理技术浅析之RFID电子标签的使用
  5. flutter doctor --android-licenses 报错解决方案
  6. numa节点_漫步云端NUMA调度
  7. cad一键标注闭合区域lisp_自从用了这个CAD神器,我下班总比别人早
  8. 利用脑机接口提高意念打字速度,让新手用户也能快速上手意念交流
  9. 学习java的一些笔记(8)
  10. 论机智,还是国产安卓旗舰花样多,从2999到10999元,各有各的“开窍点”