Oracle企业 2011-08-15
Oracle分区表 (Partition Table) 的创建及管理
一、创建分区表
分区表分为四类:1、范围分区表 2、列表分区表 3、哈希分区表 4、组合分区表
下面分别创建四类分区表。
1、范围分区表
CREATE TABLE range_example( |
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 。