以下转自:http://blog.chinaunix.net/uid-22948773-id-3451103.html 作者:TOMSYAN
今天有同事问到如何移动一个LOB索引到其他表空间。
LOB索引的特殊性使得REBUILD是不可行的。
要移动LOB索引到其他表空间,需要将相应的LOB对象移动到其他表空间。
以下括号中的内容非原文内容,为本人综合其它网络上的相关介绍进行的补充
(
如果表有Lob段,那么正常的Alter不能移动Lob段到别的表空间,而仅仅是移动了表段,可以采用如下的方法移动Lob段
alter table tablename move
lob(lobsegname) store as (tablespace newts);
例如:
)
SQL> CREATE TABLE TEST(ID INT,NAME VARCHAR2(20),CONTENTS CLOB);
表已创建。
SQL> ALTER INDEX "SYS_IL0000052966C00003$$" REBUILD;
ALTER INDEX "SYS_IL0000052966C00003$$" REBUILD
*
第 1 行出现错误:
ORA-02327: 无法以数据类型 LOB 的表达式创建索引
SQL> COL TABLESPACE_NAME FORMAT A20
SQL> COL INDEX_NAME FORMAT A30
SQL> SELECT INDEX_NAME,TABLESPACE_NAME FROM USER_INDEXES WHERE INDEX_TYPE='LOB';
INDEX_NAME TABLESPACE_NAME
------------------------------ --------------------
SYS_IL0000052966C00003$$ USERS
SQL> ALTER TABLE TEST MOVE LOB(CONTENTS) STORE AS (TABLESPACE SYSTEM);
表已更改。
SQL> SELECT INDEX_NAME,TABLESPACE_NAME FROM USER_INDEXES WHERE INDEX_TYPE='LOB';
INDEX_NAME TABLESPACE_NAME
------------------------------ --------------------
SYS_IL0000052966C00003$$ SYSTEM