更改分区的界限

本文介绍了两种调整Oracle中Range分区表界限的方法:一是通过分区裂分与合并;二是通过将分区转换为普通表再重新插入数据的方式。每种方法都详细展示了具体的步骤,包括SQL语句及索引调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值