分区(Partition)一直是Oracle数据库引以为傲的一项技术,正是分区的存在让Oracle高效的处理海量数据成为可能,在Oracle 11g中,分区技术在易用性和可扩展性上再次得到了增强。
在10g的Oracle版本中,要对分区表做调整,尤其是对RANGE分区添加新的分区都需要DBA手动定期添加,或都使用存储过程进行管理。
在11G的版本中的Interval Partition不再需要DBA去干预新分区的添加,Oracle会自动去执行这样的操作,减少了DBA的工作量。Interval Partition是Range分区的一个扩展。
使用Interval Partition也有一些限制:
- You can only specify one partitioning key column, and it must be of NUMBER or DATE type.
- Interval partitioning is not supported for index-organized tables.
- You cannot create a domain index on an interval-partitioned table.
Interval Partition也可以创建复合分区:
1. Interval-range
2. Interval-hash
3. Interval-list
以下是创建Interval分区表示例:
sys@ORCL> CREATE TABLE interval_sales
( prod_id NUMBER(6)
, cust_id NUMBER
, time_id DATE
, channel_id CHAR (1)
, promo_id NUMBER(6)
, quantity_sold NUMBER(3)
, amount_sold NUMBER(10,2)
)
PARTITION BY RANGE (time_id)
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH' ))
( PARTITION p0 VALUES LESS THAN (TO_DATE( '1-1-2018' , 'DD-MM-YYYY' )),
PARTITION p1 VALUES LESS THAN (TO_DATE( '1-1-2019' , 'DD-MM-YYYY' )),
PARTITION p2 VALUES LESS THAN (TO_DATE( '1-7-2019' , 'DD-MM-YYYY' )),
PARTITION p3 VALUES LESS THAN (TO_DATE( '1-1-2020' , 'DD-MM-YYYY' )) );
Table created.
以下为常用的四种分区表类别:
1.1、范围分区表;
1.2、列表分区表;
1.3、哈希分区表;
1.4、组合分区表;
1.1 范围分区表
CREATE TABLE range_Partition_Table(
range_key_column DATE,
NAME VARCHAR2(20),
ID integer
) PARTITION BY RANGE(range_key_column) tablespace tbs_a
(
PARTITION PART_202007 VALUES LESS THAN (TO_DATE('2020-07-1 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACE tbs01,
PARTITION PART_202008 VALUES LESS THAN (TO_DATE('2020-08-1 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACE tbs02,
PARTITION PART_202009 VALUES LESS THAN (TO_DATE('2020-09-1 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACE tbs03
);
1.2、列表分区表
CREATE TABLE list_Partition_Table(
NAME VARCHAR2(10),
DATA VARCHAR2(20)
)PARTITION BY LIST(NAME) tablespace tbs_a
(
PARTITION PART_01 VALUES('ME','PE','QC','RD'),
PARTITION PART_02 VALUES('SMT','SALE')
);
1.3 哈希分区表
CREATE TABLE hash_Partition_Table(
hash_key_column VARCHAR2(30),
DATA VARCHAR2(20)
) PARTITION BY HASH(hash_key_cloumn) tablespace tbs_name
(
PARTITION PART_0001,
PARTITION PART_0002,
PARTITION PART_0003,
PARTITION PART_0004,
PARTITION PART_0005
);
1.4 组合分区表
CREATE TABLE range_hash_Partition_Table(
range_column_key DATE,
hash_column_key INT,
DATA VARCHAR2(20)
)
PARTITION BY RANGE(range_column_key) tablespace tbs_name
SUBPARTITION BY HASH(hash_column_key) SUBPARTITIONS 2
(
PARTITION PART_202008 VALUES LESS THAN (TO_DATE('2020-08-01','yyyy-mm-dd'))(
SUBPARTITION SUB_1,
SUBPARTITION SUB_2,
SUBPARTITION SUB_3
),
PARTITION 202009 VALUES LESS THAN (TO_DATE('2020-09-01','yyyy-mm-dd'))(
SUBPARTITION SUB_1,
SUBPARTITION SUB_2
)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




