原创

Oracle分区表

分区表的类型:范围分区、列表分区、HASH分区、组合分区。分区表中的分区可分别指定在不同的表空间里,如果不写则都在同一默认表空间。
记录数在100万以下,基本不建议分区。
分区清理:alter table range_tab1 truncate partition p5;
分区转移:alter table range_tab1 exchange partition p1 with table t1;range_tab1和t1表的字段必须完全一样。结果是p1和t1的数据互转。
分区切割:alter table range_tab1 split partition pmax at (to_date('2020-07-01','yyyy-mm-dd')) into (partition p6,partition pmax);
at说明了具体的范围,小于某个指定的值。into部分说明分区被切割成两个分区,其中括号内的pmax可以改为新的名字。
分区合并:alter table range_tab1 merge partitions p6,pmax into partition pmax;merge后面跟着需要合并的分区名。into后为合并后的分区名,可以沿用已存在的分区名。
分区增删:增加分区的关键字add partition,删除分区的关键字drop partition;由于maxvalue分区的存在,无法追加新的分区,必须删除了才可以追加。
分区清理、转移、切割、合并、增删都会导致全局索引失效(局部索引不受影响),索引需要重建:alter index idx_global rebuild;可以在执行操作时加上update global indexes参数,eg:alter table range_tab1 truncate partition p5 update global indexes;
范围分区

create table range_tab1 (rid number,area_code number,area_name varchar2(20),sjsj date)
partition by range(sjsj)
(
partition p1 values less than (to_date('2020-02-01','yyyy-mm-dd')),
partition p2 values less than (to_date('2020-03-01','yyyy-mm-dd')),
partition p3 values less than (to_date('2020-04-01','yyyy-mm-dd')),
partition p4 values less than (to_date('2020-05-01','yyyy-mm-dd')),
partition p5 values less than (to_date('2020-06-01','yyyy-mm-dd')),
partition pmax values less than (maxvalue)
);

列表分区

create table list_tab1 (rid number,area_code number,area_name varchar2(20),sjsj date)
partition by list(area_code)
(
partition p1 values (1),
partition p2 values (2),
partition p3 values (3),
partition p4 values (4),
partition p5 values (5),
partition pmax values (default)
);

列表分区通过values确定范围,取值可以写多个,如partition p1 values (1,2,3)。

散列分区

create table hash_tab1 (rid number,area_code number,area_name varchar2(20),sjsj date)
partition by hash(sjsj)
partitions 12;

散列分区的分区个数尽量设置为偶数个。可以指定散列分区的分区表空间,比如:store in (ts1,ts2,ts3,ts4,ts5,ts6,ts7,ts8,ts9,ts10,ts11,ts12)表示分别存放在12个不同的表空间里。
散列分区可将数据根据一定的HASH算法,均匀分布到不同的分区中去,从而避免热点块的竞争。HASH可以精确匹配,无法范围扫描。
应用场合:在出现热点块竞争严重时,针对某些本身无法有效执行分区范围的列(比如id)进行HASH分区。

组合分区

create table range_list_tab1 (rid number,area_code number,area_name varchar2(20),sjsj date)
partition by range(sjsj)
subpartition by list(area_code)
subpartition template
(
subpartition ps1 values (1),
subpartition ps2 values (2),
subpartition ps3 values (3),
subpartition ps4 values (4),
subpartition ps5 values (5),
subpartition psmax values (default)
)
(
partition p1 values less than (to_date('2020-02-01','yyyy-mm-dd')),
partition p2 values less than (to_date('2020-03-01','yyyy-mm-dd')),
partition p3 values less than (to_date('2020-04-01','yyyy-mm-dd')),
partition p4 values less than (to_date('2020-05-01','yyyy-mm-dd')),
partition p5 values less than (to_date('2020-06-01','yyyy-mm-dd')),
partition pmax values less than (maxvalue)
);

组合分区由主分区和从分区组成,如范围-列表分区。
只要涉及子分区,都需要有subpartition关键字。
表空间可以分别指定。

正文到此结束
该篇文章的评论功能已被站长关闭