交换分区导致索引失效-----global index篇
前文说到:交换分区导致索引失效-----local index,本次总结下:交换分区导致索引失效-----global index
?
测试环境:
10.1.0.2.0
Window server 2003
?
1.概念篇
?
交换分区:所谓的交换分区就是分区表和分区表之间,或者表与分区表之间的数据互相迁移。
global index:即全局分区索引,此索引的分区方式和完全不同于其所在表的分区方式,相当于对索引单独分区,完全不同于其所在表的分区机制,缺点:不易维护。 全局分区索引只按范围或者散列hash分区,本例中hash分区是10g以后才支持的,当然你可以指定其他的分区方式。
?
2.初始化脚本
test@ORCL> create table t_partition (id number,name varchar2(50)) 2 partition by range(id)( 3 partition p1 values less than (10) , 4 partition p2 values less than (20) , 5 partition p3 values less than (30) , 6 partition pmax values less than (maxvalue) 7 );表已创建。test@ORCL>alter table t_partition add constraint pk_t_partition primary key (id);表已更改。test@ORCL>create index idx_glb_par_id 2 on t_partition(name) 3 global 4 partition by hash(name) 5 ( 6 partition p1_glb, 7 partition p2_glb, 8 partition p3_glb 9 );索引已创建。test@ORCL> create table t_no_partition (id number,name varchar2(50));表已创建。test@ORCL>alter table t_no_partition add constraint pk_t_no_partition primary key (id);表已更改。test@ORCL>insert into t_no_partition values(11,'11');已创建 1 行。test@ORCL>insert into t_no_partition values(12,'ddd');已创建 1 行。test@ORCL>insert into t_no_partition values(13,'13dsa');已创建 1 行。test@ORCL>commit;提交完成。test@ORCL>select partition_name, status from user_ind_partitions;PARTITION_NAME STATUS------------------------------ --------P3_GLB USABLEP2_GLB USABLEP1_GLB USABLEtest@ORCL>select * from t_no_partition 2 ; ID NAME---------- ------------------------------ 11 11 12 ddd 13 13dsatest@ORCL>select * from t_partition;未选定行test@ORCL>alter table t_partition exchange partition p2 2 with table t_no_partition UPDATE INDEXES;表已更改。test@ORCL>select * from t_partition; ID NAME---------- ------------------------------ 11 11 12 ddd 13 13dsatest@ORCL>select * from t_no_partition 2 ;未选定行test@ORCL>select partition_name, status from user_ind_partitions;PARTITION_NAME STATUS------------------------------ --------P3_GLB USABLEP2_GLB USABLEP1_GLB USABLE
?
可见数据交换成功,而分区索引也没有失效,达到了预期的目的。
but,You cannot use UPDATE INDEXES for index-organized tables. Use UPDATE GLOBAL INDEXES instead
对于IOT,不能简单的使用UPDATE INDEXES,而用UPDATE GLOBAL INDEXES代替。
?
?