更改分区的界限

对于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';



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值