LOB 类型有哪些?
LOB相关概念
LOB类型:
< p>LOB相关概念strong>当使用数据库作为信息文件(十进制、二进制)、图像甚至音频信息的存储载体时,需要使用 lob 类型数据。
Lob有两种类型,内部Lob和外部Lob。内部Lob是指存储在Oracle数据文件中的Lob数据,外部Lob是指存储在数据库之外的操作系统中的Lob数据 ><强>强><强>。
CLOB:存储大量的单字节、字符数据,存储在内部表空间中,用于存储字符串类型的Lobs,如此h作为文本和XML文件等,字符串在数据库字符集中进行编码。
NLOB:存储定宽、多字节、字符数据,多字节国家字符数据,存储在内部表空间中。
BLOB:存储大型非结构化二进制数据,存储在内部表空间中。
BFILE:在数据库之外存储操作系统文件中的二进制文件。存储文件路径。数据库存储指向可执行外部文件的指针,因此它是只读的。
Internal Lob和External Lob的区别:
Internal Lob包括CLOB、 NLOB 和 BLOB;外部 Lob 只有 BFILE。
内部LOB可以作为表的列保存在表中,外部LOB保存在操作系统上的文件中。
内部LOB将数据库内部的数据存储在fo中rm 字节流。 Internal LOB的很多操作都可以参与事务,并且可以像普通数据一样进行备份和恢复。
External Lob,即BFILE类型。在数据库内部,该类型仅存储数据在操作系统中的位置信息,数据的实体以外部文件的形式存在于操作系统的文件系统中。因此,该类型表示的数据是只读的,不参与事务。
内部 LOB 使用复制语义。也就是说,当您使用表中另一行的 LOB 插入或更新 LOB 时,LOB 定位器以及 LOB 值都会复制到该行。另一方面,外部 LOB 使用引用语义。也就是说,仅复制 BFILE 位置,而不复制实际的操作系统文件。
p> 每个内部 LOB 列都有一个不同的LOB每行的定位符和 LOB 值的不同副本。每个 BFILE 列对于每行都有其自己的 BFILE 定位器。但是,表中可能有两行包含指向同一操作系统文件的 BFILE 定位符。 对于一般的数据表来说,一张数据表只会对应一个存储数据段的数据段目的。 对于分区表来说,通常一个分区对应一个单独的存储对象。 当数据表包含lob类型数据列时,还会有Unique创建段对象。除了常规数据段之外,系统还显然命名了两个额外的段对象。 类型分别是lobsegment和lobindex。 对于Oracle lob类型数据表,创建带有lob co的数据表lumns必须对应于创建的多个数据段。除了传统数据表创建的Table Data Segment之外,一个lob列还会生成两个特殊的段:lob段和lob索引段。 Lob段(LobSegment)对应于数据存储在数据表的lob列中。在Oracle的lob类型数据列中,有两种存储位置结构。一种是行内存储,即每一行的lob数据与其他列的数据一起以行的形式存储在数据块中。在这种情况下,lob 列的值较小。另一种是行外存储。当lob对象较大,无法保存在一个数据块中时,可以将其放在独立的lobsegment中进行存储。在行外存储中,数据行中的lob列中存储的只是指向cor的指针引用lobsegment 的响应位置。 Lob索引段(LobIndex)是Oracle的在lob类型列上强制生成索引主要用于加速lob类型数据检索操作。 Lob索引和Lob列是共生的。如果强制删除操作会报错。 SQL> 删除索引 SYS_IL0000056069C00002$$; 删除索引 SYS_IL0000056069C00002$$ ORA-22864:无法更改或删除 LOB 索引 p> 在实际物理中,在设计和部署过程中,经常会出现大对象分区和存储部署在单独的表空间中的情况。根据实际情况,一些大的lob列可以和索引一起存储在单独的表空间中。 但是请注意,对于一般 data表,lob段和lob索引段在同一个表空间。即使 SQL 语法中存在支持,单独存储 lob 段和 lobindex 的语句通常也会被忽略。 Lob与其他类型之间的转换: CHAR、NCHAR、VARCHAR2、NVARCHAR2,可以通过TO_CLOB NCLOB类型转换为CLOB; LONG RAW可以通过转换为BLOB TO_LOB、LONG 到 CLOB; 按TO_NCLOB 是转换 CHAR、NCHAR、VARCHAR2、NVARCHAR2,CLOB 到NCLOB。 强>强> LOB 段属性: 默认情况下,当表包含定义LOB字段后,Oracle会自动为每个LOB创建两个段,即lob段和lob索引段。 lob段存储每个lob的具体值,lob索引段存储每个lob值的地址。 lob段、lob索引段和表段存储在同一个表空间中。 Oracle为lob段提供了单独的段属性。我们在创建Table时可以定义将lob和table存储在不同的表空间。在定义lob时,我们必须考虑以下重要属性: chunk:A大于oracle块大小的逻辑块类型,专用于LOB数据的存储,默认为db_block_size的大小斯特ong>strong>,如果手动定义,则必须将其定义为 db_blocMultiples of k_size。最大不能超过32K。不合理的chunk定义不仅浪费存储空间,而且影响性能。在定义之前,必须了解应用以及每个LOB列中数据的平均大小,以尽量减少LOB空间的浪费。看下表就可以解释一切: 上表使用了一些数据来说明块与数据之间的存储关系更形象地说明磁盘空间的利率问题。红色标记的部分说明了不合理的块定义。必须注意的是,LOB中浪费的chunk空间是无法复用的。 禁用/启用行中的存储:默认为启用按行存储,在不分隔lob段的情况下,表中的每一行数据都存储在同一个块中。如果lob列很大,这可能会导致严重的行链接;当lob段和表段分开时,Oracle会自动将小于4k的lob数据存储在中在lob段中存储大于4k的lob数据。 pctversion/retention:这两个属性用来解决一致的问题读取lob段。吊球的特殊性决定了吊球的特殊性它无法使用撤消/回滚段来管理其更新的旧版本。通常lob会在自己的表空间中划分一部分空间来管理自己的undo,以保证读的一致性。 无缓存/缓存读取/缓存:定义LOB缓存方法, freepools 整数:指定日志段的空闲列表。 在RAC环境中,整数是实例的数量。在单人实例环境,为1
如果设置为禁用行存储< /strong>,当lob段和表段分离时,无论lob数据有多大,Oracle都会将lob数据存储在lob段中,所以上面的3500禁用存储在行32 KB、32 KB ,出现10种情况,浪费了90%的存储空间。
lob中更新的原理是在lob段中分配新的chunk来插入新数据并保留旧的镜像。如果一个数据有多次更新,那么就会有多个版本。pctversion用于定义lob段中undo区域的大小< strong>,pctverision 它是一个百分比,定义用于存储前面图像的所有 lob 空间的百分比。如果正面图片使用的空间超过这个百分比,Oracle将不会自动扩展这部分的大小,而是会复用正面图片的空间。如果 lob 段更新频繁,则 lob 段可能会增长得非常快。 保留是一种新的方式9i的参数,仅当表空间使用ASSM时才能使用。当lob更新时,前面的图像会保留一段时间,具体时间由undo_retention参数决定 。< /strong>采用哪种撤消方法必须在测试应用程序后决定。
Nocache表示不缓存任何lob数据;
cache reads是指lob读情况下的缓存数据;
cache读和写数据都可以缓存。
lob创建示例:
SQL> create tablespace person_lob datafile '+data' size 10m; >
已创建表空间。
SQL> 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
启用行存储
块8192
pctversion 2
缓存读取
索引person_remark_idx)
lob(照片)存储为person_photo(
表空间person_lob
禁用行中的存储
块 16384
pctversion 2
缓存读取
索引person_photo_idx)
表空间用户
pctfree 10;
表已创建。
--查询:
SQL> select OWNER,SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME from dba_segments where SEGMENT_NAME='PERSON_NEW';< br/>
OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME
------------------------ ------------------------- ------------------------------- ------------- ------ ---------------------------
SYS Person_new 表用户
SQL> SELECT TABLE_NAME, Column_name, Segment_name、Tablespace_name、Index_name、来自 User_lobs 的块 WHERE Table Table _Name = 'Person_new';
Table_name Column_name Segment_Name Tablespace_name Index_nameCHUNK
---------------------------------------- ---- ----------- ----------------------- ---------------- ------- ----- ------------------------------ --------- -
PERSON_NEW REMARK PERSON_REMARK PERSON_LOB PERSON_REMARK_IDX 8192
PERSON_NEW 照片至 PERSON_PHOTO PERSON_LOB PERSON_PHOTO_IDX 16384
SQL>
创建实验环境:
--创建表空间强>测试 , test_ind, test_tmp、test_blob并创建测试用户测试,
SQL> 创建表空间测试数据文件 '+DATA' 大小 20m;
表空间已创建。
SQL> create tablespace test_ind datafile '+DATA' size 20m;
表空间已创建。
SQL>创建临时表空间test_tmp TEMPFILE '+DATA'大小20m;
<强>表空间已创建。
SQL>创建表空间test_blob数据文件'+DATA'大小20m;
表空间已创建。
SQL>创建由test标识的用户test默认表空间test临时表空间test_tmp;
用户已创建。
SQL> grant connect,resource to test;
授予成功。
SQL>创建目录EXPDP< strong>as '/home/oracle';
已创建目录。
SQL> grant read,write on目录EXPDP到
strong>系统;
授予成功。
--授予表空间test_ind, test_blob,测试 扩展
SQL> alter tablespace test_ind add datafile '+DATA'尺寸400M;
表空间已更改。
SQL> alter tablespace test_blob add datafile '+DATA' size 400M;
表空间已更改。
SQL> alter tablespace test add datafile '+DATA' size 400M;
表空间已更改。
--在测试表t1下创建lob字段:
SQL> conn 测试/测试
已连接。
SQL>
SQL> create表T1(id号(8),名称varchar2(10),addr blob,res clob,照片bfile)
lob(addr)存储为testblob
(表空间 test_blob
chunk 16k
禁用行中的存储
)
lob (res) 存储为 testclob
(表空间 test_blob< br/> chunk 16k
< strong> 禁用行存储
); >已创建表。
SQL> 显示用户;
用户是“TEST”
SQL> select table_name,tablespace_name from user_tables;
TABLE_NAME TABLESPACE_NAME
------------ -------------------------------------------------- -
T1 位于 TEST 表空间中。
---加载数据:
SQL>插入 T1 值(1,'Gene',empty_blob(),empty_clob(),bfilename('EXPDP','IMG_0210.JPG'));
1 行
SQL> 插入 T1 值(2,'Gene',empty_blob(),'大字段 CLOB',bfilename('EXPDP','IMG_0210.JPG '));
已创建 1 行。
SQL> 插入 T1 值(3,'Gene' ,empty_blob(),empty_clob(),null);
已创建 1 行。
SQL> 提交;
--查询:
SQL>设置行200
SQL > col COLUMN_NAME for a20
SQL> select table_name,column_name,segment_name,tablespace_name,index_name,chunk from user_lobs;
TABLE_NAME COLUMN_NAME SEGMENT_NAME TABLESPACE_NAME INDEX_NAME 块------------------------ - ----- -------------------------------- ------------------------ - -------------------------------------------------- ----- ---------------- ----------
T1 SYS_IL0000088708C00003$$ 16384
T1 nbsp; TestClob Test_blob SYS_IL0000088708C00004 $ $ 16384
/> p>
可以看到创建表时定义了两个SEGMENT名称TESTBLOB和TESTCLOB
SQL> conn / as sysdba
已连接。
SQL> col SEGMENT_NAME for a25
SQL> 从 dba_segments 中选择 OWNER、SEGMENT_NAME、SEGMENT_TYPE、TABLESPACE_NAME,其中 OWNER='TEST';
所有者 SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME
-------------------- ------------ ---- --------------------- ------------- ----- ---------- -------------------
测试 TESTCLOB TEST_BLOB
测试‐ SYS_IL toSYS_IL0000088708C00003$$ LOBINDEX TEST_BLOB
从这里您可以参见 TESTCLOB、TESTBLOB两者都是 LOBSEGMENT 类型的段,SYS_IL0000087540C00004$$ 和 SYS_IL0000087540C00003$$ 是 L 类型的段对象OBINDEX,并且是 >自动创建。
Lob大对象运营管理
--创建包含大对象字段的表
SQL> !export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
SQL> 授予对 EXPDP 目录的读、写权限以进行测试;
授权成功。
SQL> conn test/test
已连接。
SQL>
SQL>创建表 test001 (fname varchar2(50),content blob);
已创建表。
SQL> create table test002 (fname varchar2(50),content clob) ;< /strong>
表已创建。
< p> --(1).. 准备插入大物体
--1.创建一个文件存储目录(让Oracle管理这个目录)
之前已经创建过了。 。 。 。 。 。 。 。 。 。 。 。
--2.您可以授权其他用户访问该目录
授予对目录EXPDP的读、写权限给scott;
--( 2)。准备将大对象存储在test001表中
声明
tempimg blob;
tempdir bfile := bfilename('EXPDP', 'IMG_0210.jpg');
开始
insert 到 test001
值
('IMG_0210.jpg',empty_blob())
返回内容进入 tempimg;
dbms_lob.fileopen(tempdir);
dbms_lob.loadfromfile(tempimg, tempdir, dbms_lob.getlength(tempdir));
dbms_lob.fileclose(tempdir);
dbms_output.put_line('恭喜,终于成功了!!!');
提交;
结束;
/
PL/SQL 过程成功完成。
--将Blob对象写入磁盘文件
声明 PL/SQL 过程成功完成。 实际测试时,HHAHAHAHAHAHAHAAHA.JPG的大小与IMG_0210.jpg相同,可以打开。 /*文本大对象(clob)的读写*/ --写入文本文件第一种方式 声明
l_file utl_file.file_type;
l_buffer raw(32767);strong>
l_amount binary_integer := 3276;
l_pos int := 1;
l_blob blob;
> l_blob_len int;
开始
从test001中选择内容到l_blob中;
l_blob_len := dbms_lob.getlength(l_blob);< /strong> Strong>
l_file := utl_file.fopen('EXPDP', 'HHAHAHAHAHAHAHAAHA.JPG', 'wb');
while l_pos dbms_lob.read (l_blob, l_amount, l_pos, l_buffer) ;
utl_file.put_raw(l_file, l_buffer, true) ; l_pos :=
l_pos + l_amount ;结束循环
;
utl_file.fclose(l_file);
dbms_output.put_line('恭喜,终于成功了!!!');
结束;
/
< / p>
tempimg clob;
tempdir bfile := bfilename( 'EXPDP', '70093.txt');
amount int := dbms_lob.getlength(tempdir);
src_offset int := 1;
dest_offset int := 1;
csid int := 0;
lc int := 0 ;
警告int;
开始
插入test002< br/>值
('FIRST',empty_clob())
将内容返回到tempimg;
dbms_lob.fileopen(tempdir);
dbms_lob.loadclobfromfile(tempimg,
tempdir,
<强>因为设置了,
ir);
dbms_output.put_line('恭喜终于成功');
提交;
结束;
/
PL/SQL 过程已成功完成。 p>
--第二种写文件的方式(通过异常判断文件结尾)< /strong>
声明
filecontent clob;
input_file utl_file.file_type;
buffer varchar2(2000);
l_pos int := 1;
amount int;< br/>
开始
插入test002
值
('SECOND', empty_clob())
将内容返回到 filecontent;
input_file := utl_file.fopen('EXPDP', '2.txt' , 'r ');
循环
utl_file.get_line(input_file, buffer);
amount := length(buffer);< /strong>
金额 <= 0 时退出;
dbms_lob.write(filecontent, amount, l_pos, buffer);
< strong> l_pos := l_pos + amount;
结束循环;
utl_file.fclose(input_file);
< strong> dbms_output.put_line('文件写入完成');
异常
当no_data_found时
dbms_output.put_line('恭喜终于成功');
utl_file.fclose(input_file);
end;
/
PL/SQL 过程已成功完成。
--读取表中数据到文件
声明
src clob;
outfile utl_file.file_type;
长度整数;
缓冲区varchar2(8000);
开始< /strong>
从 test002 选择内容到 src,其中 fname = 'SECOND';
length := dbms_lob.getlength(src);
dbms_lob.read(src, length, 1, buffer);
outfile := utl_file. fopen('EXPDP', '哈哈哈哈哈哈.txt', 'w', 8000);
utl_file.put(outfile, buffer);
utl_file.fclose(outfile);
dbms_output.put_line('写入完成');
end;
< strong>/
PL/SQL 过程已成功完成。
清理CLOB字段并压缩CLOB空间
1.创建LOB字段存储表空间:
create tablespace lob_test datafile '/oracle/data/lob_test.dbf' size 500m autoextend on下一个 10m 最大尺寸无限制;
2.将 LOB 字段移至单独的表空间:
ALTER TABLE CENTER_ADMIN.NWS_NEWS
< p>MOVE LOB(ABSTRACT)STORE AS (TABLESPACE lob_test);
说明:ABSTRACT---是一个CLOB类型字段lob_test-- - 是新创建的表空间。
3.清除指定时间段内CLOB字段的内容:
update CENTER_ADMIN.NWS_NEWS
set ABSTRACT=EMPTY_CLOB( )
其中 substr(to_char(pubdate,' yyyy-mm-dd'),1,4)='2011'
4.单个收缩CLOB字段:
ALTER TABLE CENTER_ADMIN.NWS_NEWSMODIFY LOB(摘要)(缩小空间);
--N注:该方法会在表空间级别释放一些空间以供其他对象使用。 但这部分空间仍然被操作系统层面占用
5. 操作系统级别的可用空间(这一步一般不做): strong>
alter database datafile '/oracle/data/lob_test.dbf' resize 400m
--注意:大多数情况下,一个表空间中不可能只存储一个 CLOB 字段。如果需要真正从操作系统层面释放空间,还是需要shink table或者EXP/IMP等操作。
具有 LOB 字段的表的移动
< strong>迁移包含 blob 字段的表:
SQL> select 'alter table '||t.table_name ||'移动表空间 tabespace_name lob('||t .COLUMN_NAME||') 存储为 (表空间 tablespace_name);'来自 user_lobs t;
'ALTERTABLE'||T.TABLE_NAME||'MOVETABLESPACETABESPACE_NAMELOB('||T.COLUMN_NAME||')STOREAS(TABLESPACETABLESPACE_NAME);'
-------------------------------------------------------- --------------------------------------------------------------- ------------------- --------------------
alter table T1 move tablespace tabespace_name lob(ADDR) store as (tablespace tablespace_name);
alter table T1 move tablespace tabespace_name lob( RES) store as (tablespace tablespace_name);
alter table TEST001 move tablespace tabespace_name lob(CONTENT) store as (tablespace tablespace_name);
alter table TEST002 移动表空间 tabespace_name lob(CONTENT) 存储为 (表空间 tablespace_name);
--将t1表的lob字段迁移到test_ind表空间:如下
SQL> alter table T1 move tablespace test lob(ADDR) store as(表空间test_ind);
表已更改。
SQL> alter table T1 move tablespace test lob(RES) store as (tablespace test_ind );
表格已更改。
SQL> 从 dba_segments 中选择 OWNER、SEGMENT_NAME、SEGMENT_TYPE、TABLESPACE_NAME,其中 OWNER='TEST';
所有者 nbsp; SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME
-------------------------------- ---- ---------------------------------- ------------------ ---------- - ------------------
测试 SYS_LOB0000088713C00002$$ LOBSEGMENT 测试
测试 SYS_IL00000 88713C00002$$ LOBINDEX测试
TESTTEST001 测试 T1 T1 测试
测试测试
测试 TESTCLOBLOBSEGMENT TEST_IND
测试TESTBLOB TEST_IND
测试 SYS_IL0000088708C00003$$ LOBINDEX TEST_IND
测试 SYS_IL0000088708C00004$$ LOBINDEX TEST_IND
选择了 8 行。
SQL> select INDEX_NAME,OWNER,STATUS from dba_indexes where TABLE_NAME='T1' and TABLE_OWNER=' test -------- --------
SYS_IL0000088708C00003$$ 测试 有效
SYS_IL0000088708C00004$$ 测试有效
--用LOB表导入导出
创建目录 EXPDP 为“/home/oracle”;
<强g>授予系统对EXPDP目录的读、写权限;
导出NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
--以上已经完成,直接导入导出, 如下;
[oracle@dbrac1 ~]$ expdp system/oracle目录=EXPDP表=test.t1 dumpfile=20171129exp .dmp logfile=20171129exp.log
导出:版本 11.2.0.4.0 - 于 2017 年 10 月 18 日星期三 12:33:55 生产
版权所有 (c) 1982、2011,Oracle 和/或其附属公司。保留所有权利。
连接到:Oracle Database 11g 企业版版本 11.2。 0.4.0 - 64 位生产
具有分区、真实应用程序集群、自动存储管理、OLAP、
数据挖掘和真实应用程序测试选项< /strong>
启动“SYSTEM”。“SYS_EXPORT_TABLE_01”:system/********目录=EXPDP表=test.t1dumpfile=20171129exp.dmp logfile=20171129exp.log
正在使用 BLOCKS 方法进行估计...
正在处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA< /strong>
使用 BLOCKS 方法估算的总大小:192 KB Strong>
处理对象类型 table_export/table/table
。导出“测试”。 "T1" 6.757 KB 3 ROWS
主表“SYSTEM”.“SYS_EXPORT_TABLE_01”已成功加载/卸载
******** ****************** ****************************** ********************* *****
SYSTEM.SYS_EXPORT_TABLE_01 的转储文件集是:
/home/oracle/20171129exp.dmp
作业“SYSTEM”.“SYS_EXPORT_TABLE_01”成功完成 2017 年 10 月 18 日星期三 12:35:14 已过去 0 00:01:04
[oracle@dbrac1 ~]$
<强g>--然后导入
将表test导入到用户scott中,在用户表空间中,并将lob字段保存到test_blob中。
首先检查:
SQL> conn scott/tiger;
已连接。< br/> SQL> 从选项卡中选择*;
TNAME TABTYPE Clusterid
--------------------- ---------------------------------------------------------------- ------ ------- ----------
奖金 表
部门 p;表格
EMP表格
SALGRADE T4表格
--再次进行导入操作
[oracle@dbrac1 ~]$ impdp system/oracledirectory=EXPDPtables= test.t1 remap_schema=测试:scott remap_tablespace=测试:用户,TEST_IND:TEST_BLOB dumpfile=20171129exp.dmp logfile=20171129imp.log
导入:版本 11.2.0.4.0 - 于 2017 年 10 月 18 日星期三 12:39:53 投入生产
版权所有 (c) 1982、2011,Oracle 和/或其附属公司。保留所有权利。
连接到:Oracle Database 11g 企业版版本 11.2.0.4.0 - 64 位生产
使用分区、真实应用集群、自动存储管理、OLAP、
数据挖掘和真实应用程序测试选项
主表“SYSTEM”.“SYS_IMPORT_TABLE_01”成功加载/卸载
启动“SYSTEM”。“SYS_IMPORT_TABLE_01”:system/********目录=EXPDP表=test.t1 remap_schema=test:scott remap_tablespace=test: users,TEST_IND:TEST_BLOB dumpfile=20171129exp.dmp logfile=20171129imp.log
处理对象类型 TABLE_EXPORT/TABLE/TABLE
处理对象类型 TABLE_EXPORT/表/TABLE_DATA
.....“T1” 6.757 KB 3 ROWS
作业“系统”。 "Sys_import_table_01" 已完成 2017 年 10 月 18 日星期三 12:40:09 已过去 0 00:00:12
[oracle@dbrac1 ~]$
--验证:
SQL> select OWNER,SEGMENT_NAME, SEGMENT_TYPE,TABLESPACE_NAME 来自 dba_segments,其中 OWNER='SCOTT';
sp; TABLESPACE_NAME
------------------------------------------------ ----- - ------------------------------------------------- ------------ -----------------
SCOTT PK_EMP 索引 用户
SCOTT PK_DEPT 索引 用户
SCOTT T4 分区用户
SCOTT 用户
SCOTT SALGRADE表用户
SCOTT TABLEDEPT 表表用户
SCOTT TESTCLOB TEST_BLOBstrong>
SCOTT bsp; SEGMENT_TYPE TABLESPACE_NAME
------------------------ ------------------------ ----------------------------------- ---------- ----- -------------------------------------
Scott Sys_il0000088773C00003 $$ Lobindex test_blob
选择了12行。
数据已导入到用户user中,原始lob字段已导入到test_blob表空间 strong>
LOB性能问题
lob字段默认生成lobindex和lobsegment,在不指定具体表空间,lob字段索引存储在系统表下空间。
当lob存储在表中时,可以进行缓存,其运行效率比存储在lobsegment中的lob(不带lobindex)高很多。
当lob存储在logsegment中时,默认情况下不会缓存在缓冲区中, 读写lob都是物理IO,非常昂贵。因此,不要频繁更新大于4kb的lob字段。效率很低。
当lob存储在logsegment中时,可以定义使用缓存(默认为 nocache )这对于中等大小的lob(比如几k到几十k)非常有效,减少物理IO。
至此,相信大家对“什么是LOB类型”有了更深入的了解了,不妨来实践一下吧!这是网站。更多相关内容,您可以进入相关渠道进行查询。关注我们并继续学习!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > LOB 类型有哪些?