以下转自: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