Oracle分区表 (Partition Table) 的创建及管理

时间:2021-09-12 13:28:25

一、创建分区表

分区表分为四类:1、范围分区表 2、列表分区表 3、哈希分区表 4、组合分区表

下面分别创建四类分区表。

1、范围分区表

CREATE TABLE range_example(
      range_key_column DATE,
      DATA VARCHAR2(20),
      ID integer
) PARTITION BY RANGE(range_key_column)
(
  PARTITION part01 VALUES LESS THAN (TO_DATE('2008-07-1 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACE tbs01,
  PARTITION part02 VALUES LESS THAN (TO_DATE('2008-08-1 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACE tbs02,
  PARTITION part03 VALUES LESS THAN (TO_DATE('2008-09-1 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACE tbs03
);

2、列表分区表

CREATE TABLE list_example(

      dname VARCHAR2(10),

      DATA VARCHAR2(20)

) PARTITION BY LIST(dname)

(    

  PARTITION part01 VALUES('ME','PE','QC','RD'),

  PARTITION part02 VALUES('SMT','SALE')

);

3、哈希分区表

CREATE TABLE hash_example(

      hash_key_column DATE,

      DATA VARCHAR2(20)

) PARTITION BY HASH(hash_key_cloumn)

(    

  PARTITION part01 ,

  PARTITION part02

);

4、组合分区表

CREATE TABLE range_hash_example(

      range_column_key DATE,

      hash_column_key INT,

      DATA VARCHAR2(20)

)

PARTITION BY RANGE(range_column_key)

SUBPARTITION BY HASH(hash_column_key) SUBPARTITIONS 2

(

   PARTITION part_1 VALUES LESS THAN (TO_DATE('2008-08-01','yyyy-mm-dd'))(

        SUBPARTITION part_1_sub_1,

        SUBPARTITION part_1_sub_2,

        SUBPARTITION part_1_sub_3

   ),

   PARTITION part_2 VALUES LESS THAN (TO_DATE('2008-09-01','yyyy-mm-dd'))(

        SUBPARTITION part_2_sub_1,

        SUBPARTITION part_2_sub_2

)

);

--注 subpartitions 2 并不是指定subpartition的个数一定为2,实际上每个分区的子分区个数可以不同。subpartitions 关键字的作用到底是什么?如果不指定subpartition的具体明细,则系统按照subpartitions的值指定subpartition的个数生成子分区,名称由系统定义。

二、增加分区

-- range partitioned table

ALTER TABLE range_example ADD PARTITION part04 VALUES LESS THAN (TO_DATE('2008-10-1 00:00:00','yyyy-mm-dd hh24:mi:ss'));

--list partitioned table

ALTER TABLE list_example ADD PARTITION part04 VALUES ('TE');

--Adding Values for a List Partition

ALTER TABLE  list_example MODIFY PARTITION part04 ADD VALUES('MIS');

--Dropping Values from a List Partition

ALTER TABLE  list_example MODIFY PARTITION part04 DROP VALUES('MIS');

--hash partitioned table

ALTER TABLE hash_example ADD PARTITION part03;

--增加subpartition

ALTER TABLE range_hash_example MODIFY PARTITION part_1 ADD SUBPARTITION part_1_sub_4;

注:hash partitioned table 新增partition时,现有表的中所有data都有重新计算hash值,然后重新分配到分区中。所以被重新分配的分区的 indexes需要rebuild 。