oracle lob分类规则有哪些

59次阅读
没有评论

共计 2195 个字符,预计需要花费 6 分钟才能阅读完成。

本篇内容主要讲解“oracle lob 分类规则有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“oracle lob 分类规则有哪些”吧!

什么是 lob?

LOBs:Large 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: 外部二进制文件

lob 于 long 或者 long raw 类型比较

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

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

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

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

oracle 建议用 lob 代替 long 类型。

 

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

 

lob 列的状态

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

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

populated:lob 实例的指针和值都存在。

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 by,group by 或者聚合函数中。

 

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

 

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

 

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

 

到此,相信大家对“oracle lob 分类规则有哪些”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-20发表,共计2195字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)