oracle lob对象-含义分类规则(一)

什么是lob

LOBsLarge Objects的缩写。一个lob最大可以容纳8TB-128TB

 

lob分类

1.内部LOBs

lob存储在数据库内部,便于空间管理和读取效率。内部LOBs也分为永久和临时。永久lob是存在与数据库中的表里面。临时lob是只有自己可见的在临时表空间中存在的。永久lob支持事务处理和介质恢复。

clob:存储数据库定义的字符集中的字符数据,宽度固定,可以代替long类型。

blob:存储二进制数据,可以代替long raw类型。

nclob:存储在国家字符集中定义的字符数据,支持变长宽度

2.外部LOBs

外部LOBs不存储在数据库内部的表空间上,而是存储于操作系统文件。BFILE类型是唯一的外部LOBs数据类型。BFILE类型是只读的数据类型。

bfile:外部二进制文件

 

 

loblong或者long raw类型比较

相比之下,lob具有下面的优点:

longlong raws类型最大只能存储2G数据。

一张表只能有一个longlong raw类型的列,但是可以有很多不同lob类型的lob列。

lob支持分散读,long只支持连续读。

oracle建议用lob代替long类型。

 

一个lob实例有1个指针(locator)和一个值(value)。locatorlob value的物理存储位置,lob valuelob对象存储的具体数据。实际上表中的行只记录了lob对象的指针,而不是存储实际的值。

 

 

 

lob列的状态

null:表格单元已经建立,但是表格单元没有指针也没有值。

empty:在表格单元中已经存在了一个lob实例,但是只有指针,没有值。lob的长度是0

populatedlob实例的指针和值都存在。

 

 

lob相关规则限制

1.不能指定lob列为主键。

2.oracle已经限制了对远端LOBs对象的支持。只剩下三种方式:

2.1 Create table as select or insert as select.

 

CREATE TABLE t AS SELECT * FROM table1@remote_site;

INSERT INTO t SELECT * FROM table1@remote_site;

UPDATE t SET lobcol = (SELECT lobcol FROM table1@remote_site);

INSERT INTO table1@remote_site SELECT * FROM local_table;

UPDATE table1@remote_site SET lobcol = (SELECT lobcol FROM local_table);

DELETE FROM table1@remote_site

 

2.2 Functions on remote LOBs returning scalars.远程lob的函数返回标量的,如下面:

 

CREATE TABLE tab AS SELECT DBMS_LOB.GETLENGTH@dbs2(clob_col) len FROM tab@dbs2;

CREATE TABLE tab AS SELECT LENGTH(clob_col) len FROM tab@dbs2;

 

下面是不支持的,因为DBMS_LOB.SUBSTR返回LOB,不是标量:

 

CREATE TABLE tab AS SELECT DBMS_LOB.SUBSTR(clob_col) from tab@dbs2;

 

2.3 数据接口.

You can insert a character or binary buffer into a remote CLOB or BLOB, and select a remote CLOB or BLOB into a character or binary buffer. For example (in PL/SQL):

 

SELECT clobcol1, type1.blobattr INTO varchar_buf1, raw_buf2 FROM

   table1@remote_site;

INSERT INTO table1@remotesite (clobcol1, type1.blobattr) VALUES varchar_buf1,

   raw_buf2;

INSERT INTO table1@remotesite (lobcol) VALUES ('test');

UPDATE table1 SET lobcol = 'xxx';

 

3.簇表不能包括lob

4.如下数据结构仅支持临时lob对象,不能将这些存储在table中作为永久lob

任何lob类型的变长数组;

自定义类型中包括lob,该自定义类型又在变长数组中;

任何lob类型的anydata类型;

自定义类型中包括lob,该自定义类型又在anydata中。

 

5.lob列不能出现在order bygroup by或者聚合函数中。

 

6.lob段的第一个区必须至少包括三个数据库块。

 

7.lob列上不能建索引。但是可以建域索引。

 

8.lob列不能用在select distinct中。

 

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31480688/viewspace-2155299/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31480688/viewspace-2155299/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值