加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

关于Oracle数据库LOB大字段总结

发布时间:2019-08-28 18:55:37 所属栏目:编程 来源:波波说运维
导读:在ORACLE数据库中,DBA_OBJECTS视图中OBJECT_TYPE为LOB的工具是什么对象呢?着实OBJECT_TYPE为LOB就是大工具(LOB),它指那些用来存储大量数据的数据库字段。 Oracle 11gR2 文档: http://download.oracle.com/docs/cd/E11882_01/appdev.112/e18294/adlob_ta
副问题[/!--empirenews.page--]

在ORACLE数据库中,DBA_OBJECTS视图中OBJECT_TYPE为LOB的工具是什么对象呢?着实OBJECT_TYPE为LOB就是大工具(LOB),它指那些用来存储大量数据的数据库字段。

Oracle 11gR2 文档:

http://download.oracle.com/docs/cd/E11882_01/appdev.112/e18294/adlob_tables.htm#ADLOB45267

关于Oracle数据库LOB大字段总结

一、LOB 分类

LOB大工具首要是用来存储大量数据的数据库字段,在Oracle 9iR2 中LOB的最大容量是4G,Oracle 10g 最大8T,Oracle 11g 最大是128T。详细取决于blocksize 的巨细。

1. Oracle 支持4 种范例的LOB:

  • CLOB:字符LOB。这种范例用于存储大量的文本信息,如XML 可能只是纯文本。这个数据范例必要举办字符集转换,也就是说,在获取时,这个字段中的字符会从数据库的字符集转换为客户的字符集,而在修改时会从客户的字符集转换为数据库的字符集。
  • NCLOB:这是另一种范例的字符LOB。存储在这一列中的数据所回收的字符集是数据库的国度字符集,而不是数据库的默认字符集。
  • BLOB:二进制LOB。这种范例用于存储大量的二进制信息,如字处理赏罚文档,图像和你能想像到的任何其他数据。它不会执行字符集转换。应用向BLOB 中写入什么位和字节,BLOB就会返回什么为和字节。
  • BFILE:二进制文件LOB。这与其说是一个数据库存储实体,不如说是一个指针。带BFILE列的数据库中存储的只是操纵体系中某个文件的一个指针。这个文件在数据库之外维护,基础不是数据库的一部门。BFILE 提供了文件内容的只读会见。

2. LOB数据范例分类

(1) 按存储数据的范例分:

字符范例:

  • CLOB:存储大量 单字节 字符数据。
  • NLOB:存储定宽 多字节 字符数据。

二进制范例:

  • BLOB:存储较大无布局的二进制数据。

二进制文件范例:

  • BFILE:将二进制文件存储在数据库外部的操纵体系文件中。存放文件路径。

(2) 按存储方法分:

  • 存储在内部表空间(内部LOB):CLOB,NLOB和BLOB
  • 指向外部操纵体系文件(外部LOB):BFILE

二、Lob的存储

我们成立含有lob字段的表时,oracle会自动为lob字段成立两个单独的segment,一个用来存放数据,另一个用来存放索引,而且它们城市存储在对应表指定的表空间中。

关于Oracle数据库LOB大字段总结

如上例所示,每个lob字段都对应两个segment,个中存放lob数据的以SYS_LOB开头,存放索引以SYS_IL开头。

LOB 按“块”(chunk)或(piece)来存储,每个片断都可以会见。

三、Lob与其余范例的转换

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

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

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

四、Oracle数据库的SYS_LOB

看看你的内外是不是存在blog,clob等范例的字段,当我们所成立的表中含有lob型的数据时,oracle会为每个lob字段天生一个独立的segment用来存放数据,同时也成立了独立的index segment .oracle对它们是单独打点的。

平凡表只会新增一个或两个段工具.范例为TABLE和INDEX,数据就存放在表段中.索引就放在索引段中。可是LOB列则特殊新增了两个段工具,范例为LOBSEGMENT和LOBINDEX,LOBINDEX用于指向LOB段,找出个中的某一部门,以是存储在表中的LOB存储的是一个地点,可能说是一个指针,现实上表中的lob列中存的是一个地点段.然后在lobindex找到全部的地点段.然后在lobSegment中把全部地点段的值都读取了来。以是lobSegment就生涯了LOG列的真正的数据,以是会很是大,而且独立于原始表存在。

先看看这个对应的表的字段是否稀有据,假若有你就无法删除这个sys_lob$的工具。想镌汰空间的占用就整理汗青数据,可能从头导出导入下。

五、相干观念

关于LOB,我们可以行使dbms_metadata来得到它的完备的剧本:

  1. SELECT DBMS_METADATA.GET_DDL( 'TABLE', 'LOB_TABLE' ) FROM DUAL 

1. 表空间

生涯lob数据的表空间可以差异于生涯表数据的表空间,为LOB数据单独行使一个表空间有利于备份和规复以及空间打点可是lobindex和lobsegment必需在统一个表空间中

2. IN ROW

  1. ENABLE STORAGE IN ROW 
  2. DISABLE STORAGE IN ROW 

节制LOB数据是否总与表分隔存储(存储在lobsegment中),或是偶然可以与表一同存储,而不消单独放在lobsegment中。

假如配置了ENABLE STORAGE IN ROW,而不是DISABLE STORAGE IN ROW,小LOB(最多4,000字节)就会像VARCHAR2一样存储在表自己中。只有当LOB高出了4,000字节时,才会“移出”到lobsegment中

默认举动是启用行内存储ENABLE STORAGE IN ROW,假如lob存储的数据巨细能在表自己中放下,提议回收内联存储

3. CHUNK

块(chunk)是逻辑上持续的一组数据库块(block),这也是LOB的最小分派单位。,每个LOB实例(每个行外存储的LOB值)会占用至少一个CHUNK。一个CHUNK有一个LOB值行使,每个chunk的巨细应该尽也许与现实lob数据的巨细临近,以镌汰挥霍空间;

4. PCTVERSION

节制lob的读同等性。

PCTVERSION节制着用于实现LOB数据版本化的已分派LOB空间的百分比(这些数据库块由某个时刻点的LOB所用,并处在lobsegment的HWM以下)。对付很多行使环境来说,默认配置12%就足够了,由于在许多环境下,你只是要INSERT和获取LOB(凡是不会执行LOB的更新;LOB每每会插入一次,而获取多次)。因此,不必为LOB版本化预留太多的空间(乃至可以没有)。

假如你的应用确实常常修改LOB,假设很频仍地读LOB,与此同时其它某个会话正在修改这些LOB,12%也许就太小了。假如处理赏罚LOB时碰着一个ORA-22924错误,办理方案不是增进undo表空间的巨细,也不是增进undo保存时刻(UNDO_RETENTION),假如你在行使手动undo打点,那么增进更多RBS空间也不能办理这个题目。而是应该行使以下呼吁:

  1. ALTER TABLE tabname MODIFY LOB (lobname) ( PCTVERSION n) 

增进lobsegment中为实现数据版本化所用的空间巨细。

5. CACHE

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读