ORACLE LOB大字段介绍和管理

查询lob字段对应的表:

sql 复制代码
select e.owner, l.table_name, l.segment_name
  from dba_extents e, dba_lobs l
 where e.owner = l.owner and
 e.segment_name = l.segment_name
   and e.segment_type = 'LOBSEGMENT'
   and l.segment_name like 'SYS_LOB0021730912C00004$$';

LOB类型:

将信息文件(十进制、二进制)、图像甚至音频信息采用数据库作为保存载体时,就需要使用lob类型数据。

有两种Lob,Internal Lob和External Lob。Internal Lob是指Lob数据存储在Oracle数据文件里,External Lob是指Lob数据存储在数据库外部的操作系统中。

CLOB: 存储大量、单字节、字符数据,存储在内部表空间,用于存储字符串类型的Lob,如文本和XML文件等,字符串已数据库字符集编码。

NLOB: 存储定宽、多字节、字符数据,多字节国家字符数据,存储在内部表空间。

BLOB: 存储较大无结构的二进制数据,存储在内部表空间。

BFILE: 将二进制文件存储在数据库外部的操作系统文件中。存放文件路径。数据库存储一个执行外部文件的指针,所以它是只读的。

Internal Lob和External Lob的区别

Internal Lob包含CLOB、NLOB和BLOB;External Lob只有BFILE。

Internal LOB可以作为表的一个列保存在表中,external LOB保存在操作系统上的文件中。

Internal LOB将数据以字节流的形式存储在数据库的内部。Internal LOB的许多操作都可以参与事务,可以像处理普通数据一样对其进行备份和恢复操作。

External Lob,即BFILE类型。在数据库内,该类型仅存储数据在操作系统中的位置信息,而数据的实体以外部文件的形式存在于操作系统的文件系统中。因而,该类型所表示的数据是只读的,不参与事务。

清理CLOB字段及压缩CLOB空间

1、创建LOB字段存放表空间:

sql 复制代码
create tablespace lob_test datafile '/oracle/data/lob_test.dbf' size 500m autoextend on next 10m maxsize unlimited

2、移动LOB字段到单独存放表空间:

sql 复制代码
ALTER TABLE CENTER_ADMIN.NWS_NEWS
MOVE LOB(ABSTRACT)
STORE AS (TABLESPACE lob_test);
ABSTRACT---为一CLOB类型的字段
lob_test---为新创建的表空间。

3、清空指定时间段CLOB字段的内容:

sql 复制代码
update CENTER_ADMIN.NWS_NEWS
	set ABSTRACT=EMPTY_CLOB()
	where substr(to_char(pubdate,'yyyy-mm-dd'),1,4)='2011'

4、单独shrink CLOB字段:

sql 复制代码
ALTER TABLE CENTER_ADMIN.NWS_NEWS MODIFY LOB (ABSTRACT) (SHRINK SPACE);
复制代码
--注:此方法会在表空间级释放出部分空间给其他对象使用,但这部分空间在操作系统级还是被占用

5、在操作系统级释放空间 (这一步 一般不做):

sql 复制代码
alter database datafile '/oracle/data/lob_test.dbf' resize 400m
复制代码
---注:绝大多数情况下,不可能一个表空间中只存放一个CLOB字段,若需要从操作系统级真正释放空间,尚需要shink table或EXP/IMP等操作。

带LOB字段表的移动

对含blob字段表迁移:

sql 复制代码
select 'alter table '||t.table_name ||' move tablespace tabespace_name lob('||t.COLUMN_NAME||') store as (tablespace tablespace_name);' from user_lobs t;
sql 复制代码
alter table T1 move tablespace test lob(ADDR) store as (tablespace test_ind);
sql 复制代码
alter table T1 move tablespace test lob(RES) store as (tablespace test_ind);
sql 复制代码
SQL> alter table T1 move tablespace test lob(ADDR) store as (tablespace test_ind);  
Table altered. 
sql 复制代码
SQL> alter table T1 move tablespace test lob(RES) store as (tablespace test_ind);
Table altered.
sql 复制代码
SQL> select OWNER,SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME from dba_segments where OWNER='TEST';
   
OWNER                         SEGMENT_NAME                                                                         SEGMENT_TYPE         TABLESPACE_NAME
------------------------------ --------------------------------------------------------------------------------- ------------------ -----------------------
TEST                         T1                                                                                                               TABLE                      TEST
TEST                         TESTCLOB                                                                                                   LOBSEGMENT         TEST_IND
TEST                         TESTBLOB                                                                                                   LOBSEGMENT         TEST_IND
TEST                         SYS_IL0000087540C00003$$                                                                      LOBINDEX              TEST_IND
TEST                         SYS_IL0000087540C00004$$                                                                      LOBINDEX              TEST_IND

可以看到同一个lob字段的 LOBSEGMENT和LOBINDEX类型的segment同时移动到了TEST_IND表空间。

带LOB字端表的导入导出

导出

sql 复制代码
create directory EXPDP as '/backup/expdp';
grant read,write on directory EXPDP to system;
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
[oracle@primary ~]$ expdp system/oracle directory=EXPDP tables=test.t1 dumpfile=20160114expt1.dmp logfile=20160114expt1.log

导入

导入表test到scott用户下,user表空间中,lob字段保存到test_blob中。

sql 复制代码
alter user scott identified by tiger account unlock;
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
[oracle@primary ~]$ impdp system/oracle directory=EXPDP tables=test.t1 remap_schema=test:scott remap_tablespace=test:users,TEST_IND:TEST_BLOB dumpfile=20160114expt1.dmp logfile=imp20160114expt1.log

更改分区表的lob的表空间

sql 复制代码
create table show_lob_storage 
(aaa number(5), 
 bbb varchar2(10), 
 ccc number(5), 
 ddd CLOB ) 
PARTITION BY RANGE(aaa) 
(PARTITION p1 VALUES LESS THAN (50) tablespace AAA 
   LOB (ddd) STORE AS (tablespace partforlob01), 
 PARTITION p2 VALUES LESS THAN (100) tablespace BBB 
   LOB (ddd) STORE AS (tablespace partforlob02), 
 PARTITION p3 VALUES LESS THAN (MAXVALUE) tablespace CCC
   LOB (ddd) STORE AS (tablespace partforlob03));
sql 复制代码
SQL> select partition_name,lob_partition_name,tablespace_name  from user_lob_partitions where table_name = 'SHOW_LOB_STORAGE';

PARTITION_NAME                 LOB_PARTITION_NAME             TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------
P1                             SYS_LOB_P70                    PARTFORLOB01
P2                             SYS_LOB_P76                    PARTFORLOB02
P3                             SYS_LOB_P72                    PARTFORLOB03
sql 复制代码
SQL> alter table SHOW_LOB_STORAGE move partition P2 lob(DDD) store as (tablespace PARTFORLOB03);
sql 复制代码
SQL> select partition_name,lob_partition_name,tablespace_name  from user_lob_partitions where table_name = 'SHOW_LOB_STORAGE';

PARTITION_NAME                 LOB_PARTITION_NAME             TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------
P1                             SYS_LOB_P70                    PARTFORLOB01
P2                             SYS_LOB_P78                    PARTFORLOB03
P3                             SYS_LOB_P72                    PARTFORLOB03
相关推荐
wefg16 分钟前
【MySQL】事务
数据库·mysql
黑白极客13 分钟前
mysql的高可用性
数据库·mysql
一十九的酒26 分钟前
Oracle 12c 标准版无缝升级企业版实战记录
数据库·oracle·标准版切换到企业版
ZhengEnCi40 分钟前
S02-SpringBoot实体类新增字段对已有数据的影响及自动DDL同步机制详解
数据库·spring boot
妙码生花1 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(三十二):增加 admin_rule 模型及数据表迁移
数据库·go·ai编程
liguojun20251 小时前
篮球馆自动计时收费系统:从规则配置到自动结算的全流程拆解
java·大数据·运维·人工智能·物联网·1024程序员节
Promise微笑2 小时前
红外分辨率 160×120、320×240、384×288 与 640×480实战选型指南
大数据·运维·人工智能·物联网
千维百策6662 小时前
SRE 中如何消除琐务:提升工程效率与服务可靠性的实践方法
数据库
卓怡学长2 小时前
w266基于spring boot + vue 圣地延安美食乐享系统
java·数据库·vue.js·spring boot·spring·intellij-idea
云飞云共享云桌面3 小时前
单机建模卡顿运维繁琐!中小型机械制造厂云飞云 3D 云桌面落地
运维·服务器·网络·3d·自动化·电脑·负载均衡