广告
返回顶部
首页 > 资讯 > 数据库 >oracle lob 简单介绍
  • 859
分享到

oracle lob 简单介绍

2024-04-02 19:04:59 859人浏览 薄情痞子
摘要

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

何为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: 30
          characters Maximum number of open BFILEs: The maximum number of BFILEs is limited by the value of the
          SESSioN_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 columns
         per 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 columns
         per 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 columns
  per 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                              10
  3500 disable storage in row   4 KB          4 KB                               90  33 KB                         32 KB         64 KB                              51
  2 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)


您可能感兴趣的文档:

--结束END--

本文标题: oracle lob 简单介绍

本文链接: https://www.lsjlt.com/news/42078.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle lob 简单介绍
    何为LOB?lob为oracle数据库的一个大对象数据类型,可以存储超过4000bytes的字符串,二进制数据,OS文件等大对象信息.最大可存储的容量根oracle的版本和oracle 块大小有关.有那几种...
    99+
    2022-10-18
  • oracle sql_trace 简单应用介绍
    SQL_TRACE是Oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE是非常常用的方法。1.通过putty 或其他主机工具进入数据库所在主...
    99+
    2022-10-18
  • Django admin简单介绍
    生成同步数据库的脚本: python manage.py makemigrations 同步数据库: python manage.py migrate 创建后台用户 python manage.py createsuperuser 访...
    99+
    2023-01-31
    简单 Django admin
  • Django ajax 简单介绍
    AJAX Asynchronous Javascript And XML是 "异步Javascript和XML"。即使用 Javascript 语言与服务器进行异步交互,传输的数据为XML。 同步交互:客户端发出一个请求后,需要等待服务器...
    99+
    2023-01-31
    简单 Django ajax
  • C++ OpenMP简单介绍
    目录一、背景知识1、program作用2、C++不同版本区别二、什么是OpenMP三、关键字1、reduction 作用2、default(shared)作用一、背景知识 1、pro...
    99+
    2023-05-20
    c++ OpenMP简介 c++ OpenMP
  • Android Socket 简单介绍
    文章目录 前言一、Socket是什么?百度百科的解释我自己的理解 二、简单示例1.服务端2.客户端3.布局4.实现 参考总结 前言 最近需求需要使用Socket进行通讯,我在工作...
    99+
    2023-09-23
    android
  • 4:GTID简单介绍
    概述: 当使用GTIDs时,可以识别和跟踪每一个事务,因为它是在原始服务器上提交的,并由任何slave应用;简单来说就是master提交的所有事务都在slaves应用一次,两者的数据就能保证一致性,此外,...
    99+
    2022-10-18
  • 1.AutoMapper简单介绍
    官网:http://automapper.org/ 源码:https://github.com/AutoMapper/AutoMapper NUGET安装: PM> Install-Package AutoMapper Au...
    99+
    2020-08-26
    1.AutoMapper简单介绍
  • 201_DMA-BUF简单介绍
    一、DMA-BUF等概念的介绍 首先需要明确DMA-BUF,Dma buffer,ION和DMA-BUF Heap是不同的概念。 在Android 多媒体系统中为了减少因不同进程之间内存的多次拷贝而产生的不必要的开销,最直接的想法是希望跟硬...
    99+
    2023-08-16
    linux android java 缓存
  • 免杀简单介绍
    免杀简单介绍 免杀是什么? ​ 免杀,指的是一种能使病毒木马免于被杀毒软件查杀的技术。 为什么要制作免杀? ​ 当前不论是个人PC还是服务器都有杀软,如个人PCwindows操作系统自带的 W...
    99+
    2023-09-01
    服务器 php 运维
  • python元组简单介绍
    目录1、拆包2、enumerate3、list()元组的特点:是一种不可变序列,一旦创建就不能修改 1、拆包 将元组的元素取出赋值给不同变量 >>> a = ...
    99+
    2022-11-12
  • Java单例模式简单介绍
    一、概念单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,...
    99+
    2023-05-31
    java 单例模式 ava
  • scrapy框架的简单介绍
    这篇文章主要介绍“scrapy框架的简单介绍”,在日常操作中,相信很多人在scrapy框架的简单介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”scrapy框架的简单介绍”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-02
  • MyBatis入门介绍(超简单)
    MyBatis 简介MyBatis的前身叫iBatis,本是apache的一个开源项目, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。MyBatis是支...
    99+
    2023-05-31
    mybatis 入门 batis
  • EVE-NG简单入门介绍
    此篇文章简单的介绍下模拟器EVE-NG的使用,具体包括Dynamips设备导入与运行,IOL设备的导入与运行,QEMU设备的导入与运行,客户端软件的安装,物理网络与虚拟网络的结合等。一.导入镜像Dynamips是由法国人Chris Fill...
    99+
    2023-06-05
  • PyTorch中的torch.cat简单介绍
    目录1.toych简单介绍2.张量Tensors3.torch.cat1.toych简单介绍 包torch包含了多维疑是的数据结构及基于其上的多种数学操作。 torch包含了多维张量...
    99+
    2022-11-13
  • Android init.rc文件简单介绍
    Android init.rc文件简单介绍 init.rc脚本是由Android中linux的第一个用户级进程init进行解析的。 init.rc 文件并不是普通的配置文件,而...
    99+
    2022-06-06
    init Android
  • python中的json简单介绍
    这篇文章主要讲解了“python中的json简单介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python中的json简单介绍”吧! ...
    99+
    2022-10-18
  • Android中的Adapter简单介绍
    Android中的Adapter在自定义显示列表时非常有用,比如SimpleAdapter,它的构造函数是:  public SimpleAdapter (Context co...
    99+
    2022-06-06
    adapter Android
  • CSS中Sprites的简单介绍
    本篇内容介绍了“CSS中Sprites的简单介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!HTML代码...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作