Oracle分区表管理

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:Oracle分区表管理

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

1、添加分区
1.1)增加分区(add partition)
语法是:alter table xxx add partition…
Alter table t_range add partition p5 values less than (50) [tablespace users];
–50 要大于之前分区的所有值
Alter table t_list add partition p5 values (7,8,9) [tablespace users];
–7,8,9均不能在之前分区中出现
Alter table t_hash add partition [p5] [tablespace users];
–添加hash分区
1.2)添加子分区
Alter table xxx modify partition p1 add subpartition …
增加RANGE-HASH子分区
ALTER TABLE diving MODIFY PARTITION locations_us
ADD SUBPARTITION us_locs5 TABLESPACE us1;
说明:Range,list增加分区不会影响索引(包括global 跟local),HASH增加分区会让数据重新分配,产生IO,如果不指定update indexes 选项则会导致有数据移动的索引unusable,需要重新编译。
当然,我们说的对索引的影响都是在表中有数据的情况下,没数据当然影响不到索引了。
2、合并分区
2.1)HASH分区或子分区
Alter table xxx coalesce partion [update indexes];
Alter table xxx modify partition p1 coalesce subpartition;
合并一次会减少一个分区(最少能减少到1个),数据重新分配,产生IO,有数据移动的索引失效(如果不指定update indexes的话).
2.2)非HASH分区
Alter table xxx merge partitions/subpartitions p1,p2 into partiton/subpartition p3 [TABLESPACE tablespace_name];
表分区必须是相邻的。
跟COALESCE一样,会产生IO,数据量大的话,IO也是相当大的。
同样可以用UPDATE INDEXES 避免索引失效
alter table dinya_test merge partitions part_01,part_02 into partition part_02;
3、删除分区(drop partition)
Alter table xxx drop partition ppp;
删除子分区:
Alter table xxx drop subpartition ppp;
此功能hash不支持。同时要注意,删除分区会同时删除该分区内数据。
同样,如果不指定update indexes的话该操作会导致GLOBAL索引失效,而LOCAL不会,因为对应的LOCAL索引分区也被删除了嘛,其他分区的LOCAL不会受到影响。
4、交换分区(exchange partition)
Alter table tb1 exchange partition/subpartition p1 with table tb2;
据说是采用了更改数据字典的方式,所以速度比较快。
可以是分区跟非分区表交换,子分区跟非分区表交换,组合分区跟分区表交换。
alter table t_partition_range exchange partition t_range_p2
with table t_partition_range_tmp;
将t_range_p2与t_partition_range_tmp的数据互迁移
注意点:
涉及交换的两表之间表结构必须一致,除非附加with validation子句;
如果是从非分区表向分区表做交换,非分区表中的数据必须符合分区表中指定分区的规则,除非附加without validation子句;
如果从分区表向分区表做交换,被交换的分区的数据必须符合分区规则,除非附加without validation子句;
Global索引或涉及到数据改动了的global索引分区会被置为unusable,除非附加update indexes子句。
5、拆分分区
功能与MERGE PARTITIONS相反。通常我们会用来拆分MAXVALUE/DEFAULT分区。
Range partition:
Alter table xxx split partition/subpartition p1 at (15) into (partition/subpartition p1_new1,partition/subpartition p1_new2);
List partition:
Alter table xxx split partition/subpartition p1 values(15,16) into (partition/subpartition p1_new1,partition/subpartition p1_new2);
原分区中符合新值定义的记录会存入第一个分区,其他存入第二个分区,当然,在新分区后面可以指定属性,比如TABLESPACE。
HASH分区不适用。
会产生IO
同样,可用update indexes 来避免索引失效
alter table timestamps split partition p1 at (to_date(‘2003-01-01′,’yyyy-mm-dd’))into (partition px tablespace ts3, partition py tablespace ts3);
将P1分区拆分成PX,PY两个分区,分界点是to_date(‘2003-01-01′,’yyyy-mm-dd’)
6、修改LIST分区—ADD VALUES
Alter table xxx modify partition/subpartition p1 add values(7,9);
要注意的是,增加的VALUES不能在其他分区列的VALUES值中存在,也不能在DEFAULT分区(如果有的话)中有相应VALUES.
不会影响索引
7、修改LIST 分区—DROP VALUES
Alter table xxx modify partition/subpartition p1 drop values(8,9);
同样,删除的values 不能存在记录.
不会影响索引
8、截断分区
跟TRUNCATE TABLE一样,截断该分区内的数据。
Alter table xxx truncate partition/subpartition p1;
同样,可用update indexes 来避免索引失效
9、移动分区
Alter table xxx move partition/subpartition p1 …;
有些功能比如改变分区表空间,modify partition就做不到,此时就可以用move partition来做
Alter table tab move partition p_tab tablespace tbl update indexes;
可用update indexes 来避免索引失效
10、修改分区默认属性(modify default attributes)
修改表属性:alter table xxx modify default attributes …
修改分区属性(适用于组合分区):alter table xxx modify default attributes for partition p1 …
只对以后添加的分区产生影响,适用于所有分区,其中hash分区只能修改表空间属性。
如:Alter table xxx modify default attributes tablespace users;
建立Oracle分区表

发表评论

邮箱地址不会被公开。 必填项已用*标注

3 + 15 =