Oracle数据库lob大对象数据类型字段总结,值得收藏
sinye56 2024-10-11 17:45 10 浏览 0 评论
概述
今天主要对Oracle数据库lob大对象数据类型字段的详细讲解,介绍ORACLE提供的CLOB,NCLOB,BLOB,BFILE共四种LOB类型。
LOB概念
lob为Oracle数据库的一个大对象数据类型,可以存储超过4000bytes的字符串,二进制数据,OS文件等大对象信息.最大可存储的容量根oracle的版本和oracle 块大小有关.
LOB分类
分为内部LOB和外部LOB。内部LOB包括CLOB、BLOB、NCOLB;外部LOB包括BFILE
内部LOB的数据存储在数据库中,并且支持事务操作(提交、回退、保持点);外部LOB的数据存储在OS文件中,并且不支持事务操作
CLOB(存放大字符数据)用于存储大批量字符数据,
BLOB(存放大二进制数据)用于存放音频、图像、图像,
NCLOB(存放大字符数据)用于存储大批量字符数据,
BFILE(存储指向OS文件的指针)用于存储电影文件。
LOB应用场景
LOB除了可以用在TABLE中定义列的类型外,还可以用来存储XML数据,ORACLE的集合类型,看下面的例子:
1) create table lobtest(a varchar2(20), b clob, c blob) tablespace users; –lob表的定义
2) LOB存储集合类型
上面定义了一个用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的空间浪费。
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可以在SQL环境操作吗?
LOB可以像使用其他数据类型一样,可以进行DML操作.
从上面的例子可以查看,BLOG和BFIEL 是不能直接在sqlplus显示的.
可操作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列.
后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~
相关推荐
- CTO偷偷传我的系统性能优化十大绝招(万字干货)
-
上篇引言:取与舍软件设计开发某种意义上是“取”与“舍”的艺术。关于性能方面,就像建筑设计成抗震9度需要额外的成本一样,高性能软件系统也意味着更高的实现成本,有时候与其他质量属性甚至会冲突,比如安全性、...
- 提升效率!VMware虚拟机性能优化十大实用技巧
-
我40岁,干跨境婚恋中介的。为服务各国用户,常得弄英语、日语、俄语系统环境,VMware虚拟机帮了不少忙。用久了发现优化下性能,效率能更高。今儿就来聊聊优化技巧和同类软件。一、VMware虚拟...
- 低延迟场景下的性能优化实践
-
本文摘录自「全球C++及系统软件技术大会」ScottMeyers曾说到过,如果你不在乎性能,为什么要在C++这里,而不去隔壁的Pythonroom呢?今天我们就从“低延迟的概述”、“低延迟系...
- Linux性能调优之内存负载调优的一些笔记
-
写在前面整理一些Linux内存调优的笔记,分享给小伙伴博文没有涉及的Demo,理论方法偏多,可以用作内存调优入门博文内容涉及:Linux内存管理的基本理论寻找内存泄露的进程内存交换空间调优不同方式的...
- 优化性能套路:带你战胜这只后段程序员的拦路虎
-
来源|极客时间《卖桃者说》作者|池建强编辑|成敏你好,这里是卖桃者说。今天给大家推荐一篇文章,来自倪朋飞老师的专栏《Linux性能优化实战》,文章主要讲的是优化性能的套路,这几乎是每个后端程序员...
- SK海力士CXL优化解决方案已成功搭载于Linux:带宽提升30%,性能提升12%以上
-
SK海力士宣布,已将用于优化CXL(ComputeExpressLink)存储器运行的自研软件异构存储器软件开发套件(HMSDK)中主要功能成功搭载于全球最大的开源操作系统Linux上,不但提升了...
- Linux内核优化:提升系统性能的秘诀
-
Linux内核优化:提升系统性能的艺术在深入Linux内核优化的世界之前,让我们先来理解一下内核优化的重要性。Linux内核是操作系统的核心,负责管理系统资源和控制硬件。一个经过精心优化的内核可以显著...
- Linux系统性能优化:七个实战经验
-
Linux系统的性能是指操作系统完成任务的有效性、稳定性和响应速度。Linux系统管理员可能经常会遇到系统不稳定、响应速度慢等问题,例如在Linux上搭建了一个web服务,经常出现网页无法打开、打开速...
- 腾讯面试:linux内存性能优化总结
-
【1】内存映射Linux内核给每个进程都提供了一个独立且连续的虚拟地址空间,以便进程可以方便地访问虚拟内存;虚拟地址空间的内部又被分为内核空间和用户空间两部分,不同字长的处理器,地址空间的范围也不同...
- Linux文件系统性能调优《参数优化详解》
-
由于各种的I/O负载情形各异,Linux系统中文件系统的缺省配置一般来说都比较中庸,强调普遍适用性。然而在特定应用下,这种配置往往在I/O性能方面不能达到最优。因此,如果应用对I/O性能要求较高,除...
- Nginx 性能优化(吐血总结)
-
一、性能优化考虑点当我需要进行性能优化时,说明我们服务器无法满足日益增长的业务。性能优化是一个比较大的课题,需要从以下几个方面进行探讨当前系统结构瓶颈了解业务模式性能与安全1、当前系统结构瓶颈首先需要...
- Linux问题分析与性能优化
-
排查顺序整体情况:top/htop/atop命令查看进程/线程、CPU、内存使用情况,CPU使用情况;dstat2查看CPU、磁盘IO、网络IO、换页、中断、切换,系统I/O状态;vmstat2查...
- 大神级产品:手机装 Linux 运行 Docker 如此简单
-
本内容来源于@什么值得买APP,观点仅代表作者本人|作者:灵昱Termux作为一个强大的Android终端模拟器,能够运行多种Linux环境。然而,直接在Termux上运行Docker并不可行,需要...
- 新手必须掌握的Linux命令
-
Shell就是终端程序的统称,它充当了人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端程序,它就会调用相应的程序服务去完成某些工作。现在包括红帽系统在内的许多主流Linux系统默认使用的终端是...
- Linux 系统常用的 30 个系统环境变量全解析
-
在Linux系统中,环境变量起着至关重要的作用,它们犹如隐藏在系统背后的“魔法指令”,掌控着诸多程序的运行路径、配置信息等关键要素。尤其在shell脚本编写时,巧妙运用环境变量,能让脚本如虎...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)