move一个表到另外一个表空间时,索引不会跟着一起move,而且会失效(LOB类型例外)。做表空间转移之前,被转移表的用户必须在目的表空间上有使用表空间的权限,否则会报错:ORA-01950: no privileges on tablespace...
表move分为
1.普通表move
2.分区表move
3.LONG
4.LOB大字段类型move
5.索引的move通过rebuild来实现
首先检查表空间有哪些表
select table_name from user_tables where tablespace_name = 'LOADTBS' order by table_Name;
select table_name ,PARTITION_NAME from useR_TAB_PARTITIONS where tablespace_name = 'LOADTBS' order by table_Name;
一、move普通表、索引
1、基本语法:
a、alter table table_name t move tablespace xxx;
b、alter index index_name rebuild tablespace xxx;
move过的普通表,在不用到失效的索引的操作语句中,语句执行正常,但如果操作的语句用到了索引(主键当做唯一索引),则此时报告用到的索引失效,语句执行失败,其他如外键,非空约束,缺省值等不会失效。
2、重新创建主键或索引基本语法为:
a、alter index index_name rebuild;
b、alter index pk_name rebuild;
3、move索引用rebuild语法:
a、alter index index_name rebuild tablespace tbs_name;
b、alter index pk_name rebuild tablespace tbs_name;
二、move分区表及索引
和普通表一样,分区表索引会失效,区别的仅仅是语法而已。
1、分区基本语法
注:如果是单级分区,则使用关键字PARTITION,如果是多级分区,则使用SUBPARTITION替代PARTITION。
如果分区或分区索引比较大,可以使用并行move或rebuild,PARALLEL (DEGREE 2);
如:
ALTER TABLE PART_ALARM move SUBPARTITION p_01 TABLESPACE users PARALLEL (DEGREE 2);
--全局索引
ALTER INDEX GX1_ PART_ALARM REBUILD tablespace users PARALLEL (DEGREE 2);
--分区索引
ALTER INDEX LX1_ PART_ALARM REBUILD SUBPARTITION p_01 TABLESPACE users1 PARALLEL (DEGREE 2);
ALTER INDEX LX1_ PART_ALARM REBUILD SUBPARTITION p_02 TABLESPACE users2 PARALLEL (DEGREE 2);
………………
ALTER INDEX LX1_ PART_ALARM REBUILD SUBPARTITION p_0n TABLESPACE usersn PARALLEL (DEGREE 2);
2、移动表的某个分区
ALTER TABLE tab_name move PARTITION partition_name TABLESPACE tbs_name;
3、重建全局索引
ALTER INDEX global_index REBUILD;
或
ALTER INDEX global_index REBUILD tablespace tbs_name;
4、重建局部索引
ALTER TABLE tab_name MODIFY PARTITION partition_name REBUILD UNUSABLE LOCAL INDEXES;
或
ALTER INDEX local_index_name REBUILD PARTITION partition_name TABLESPACE tbs_name;
提示:
USER_PART_TABLES
USER_IND_PARTITIONS
USER_IND_SUBPARTITIONS
USER_LOB_PARTITIONS
USER_LOB_SUBPARTITIONS
USER_PART_INDEXES
USER_PART_LOBS
user_segments