对于range分区的表,如果需要改大某分区a(后面的分区是b)的界限,例如可以有两种方法:
1.分区b在界限处裂分成两个分区c、分区b,将分区a合并到分区c
2.将分区a置换成普通表,分区b在界限处裂分成两个分区c、分区b,删除分区a,将普通表记录insert回分区表。
一、方法1
1.调整前的索引状态
select index_name,status from user_indexes a where a.table_name = 'TEST_TAB1';
select index_name,partition_name,status from user_ind_partitions a where a.index_name= 'TEST_TAB1_IX1';
2.分区裂分
ALTER TABLE test_tab1 SPLIT PARTITION P_20100203 at (20100203.5) INTO ( PARTITION P_20100203_01 tablespace std,PARTITION P_20100203 tablespace std);
3.分区合并
ALTER TABLE test_tab1 MERGE PARTITIONS P_20100202, P_20100203_01 INTO PARTITION P_20100203_01;
4.调整后的索引状态
select index_name,status from user_indexes a where a.table_name = 'TEST_TAB1';
select index_name,partition_name,status from user_ind_partitions a where a.index_name= 'TEST_TAB1_IX1';
5.索引重建
alter index test_tab1_ix1 rebuild partition P_20100203_01 online nologging;
二、方法2
1.创建普通空表
create table test_normal as select * from test_tab1 where rownum<0;
2.调整前的索引状态
select index_name,partition_name,status from user_ind_partitions a where a.index_name= 'TEST_TAB1_IX1';
3.将分区数据与普通表置换
alter table test_tab1 exchange partition p_20100204 with table test_normal;
4.分区裂分成2个
ALTER TABLE test_tab1 SPLIT PARTITION P_20100205 at (20100205.5) INTO ( PARTITION P_20100205_01 tablespace std,PARTITION P_20100205 tablespace std);
5.删除旧分区
alter table test_tab1 drop partition p_20100204;
6.旧分区的数据插回原表
insert into test_tab1 select * from test_normal;
7.检查索引状态必要时重建
select index_name,partition_name,status from user_ind_partitions a where a.index_name= 'TEST_TAB1_IX1';