原创 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完成。