移动带有LOB字段的表到另一个表空间

原创 Oracle 作者:kakaxi9521 时间:2016-12-02 13:42:27  1375  0

LOB这几个字符最近一直在眼前晃悠,今天研究了下。
1. LOB类型
CLOB:存储大量、单字节、字符数据,存储在内部表空间
NLOB:存储定宽、多字节、字符数据,存储在内部表空间
BLOB:存储较大无结构的二进制数据,存储在内部表空间
BFILE:将二进制文件存储在数据库外部的操作系统文件中,存放文件路径。

2. 我们在建立含有LOB的字段的表时,oracle 会自动为LOB字段建立两个单独的segment,一个用来存放数据,另一个用来存放索引,并且它们都会存储在对应表指定的表空间中。
当我们使用alter table tb_name move tablespace tbs_name来对表做空间迁移时只能移动非LOB字段的数据,而如果我们要同时移动LOB相关字段的数据,我们就必须使用如下含有特殊
参数的语句来完成: alter table tb_name move tablespace tbs_name lob (col_lob1,col_lob2) store as (tablespace tbs_name);

3. 示例,我们创建两张含有LOB字段的表,然后移动到其他表空间。
a. 创建两张含有lob字段的表
connect test/test
create table test_blob(name varchar2(10),bin1 blob,bin2 blob);
create table test_blob2(name varchar2(10),bin1 blob,bin2 blob) tablespace users;
b.查看表所属的表空间
SQL> select table_name,tablespace_name from user_tables where table_name like ‘%TEST_BLOB%’;
 
TABLE_NAME                     TABLESPACE_NAME
—————————— ——————————
TEST_BLOB                      TEST_TAB
TEST_BLOB2                     USERS
c. 查看两个表的字段信息
SQL> desc test_blob
Name Type         Nullable Default Comments
—- ———— ——– ——- ——–
NAME VARCHAR2(10) Y                        
BIN1 BLOB         Y                        
BIN2 BLOB         Y
SQL> desc test_blob2
Name Type         Nullable Default Comments
—- ———— ——– ——- ——–
NAME VARCHAR2(10) Y                        
BIN1 BLOB         Y                        
BIN2 BLOB         Y  
d. 移动test_blob表
SQL> alter table test_blob move tablespace users lob(BIN1,BIN2) store as (tablespace users);
 
Table altered
 
SQL> select table_name,tablespace_name from user_tables where table_name like ‘%TEST_BLOB%’;
 
TABLE_NAME                     TABLESPACE_NAME
—————————— ——————————
TEST_BLOB                      USERS
TEST_BLOB2                     USERS
e. 移动test_blob2表
SQL> alter table test_blob2 move tablespace test_tab lob(BIN1,BIN2) store as (tablespace test_tab);
 
Table altered
 
SQL> select table_name,tablespace_name from user_tables where table_name like ‘%TEST_BLOB%’;
 
TABLE_NAME                     TABLESPACE_NAME
—————————— ——————————
TEST_BLOB                      USERS
TEST_BLOB2                     TEST_TAB

f. 可以看到表所在的表空间move完成。

Leave a Reply