Oracle数据库版本 | 分区功能 |
8.0.5 | 引入范围分区功 |
8i | 引入散落列分区和组合范围散列分区功能。 |
9i | 引入列表分区和组合范围列表分区功能。 |
10G | 引入了对索引组织表进行范围分区、列表分区和三列分区的功能。该版本还引入了其他组合分区功能选择。 |
11G | 引入扩展的分区功能: -Interval分区 -外键分区 -虚拟列分区 -引入了分区建议器 |
范围分区:数据根据分区键值范围指定进行分布。比如,如果我们选择一个日期列作为分区键,分区“JAN-2007”就会包括所有包含从01-JAN-2007到31-JAN-2007之间的分区键值(假设分区的范围是从这个月的第一天到这个月的最后一天)。
Interval分区:11G版本引入的interval分区范围分区的一种增强功能,可实现equi-sized范围分区的自动化。创建的分区作为元数据,只有最开始的分区是永久分区。随着数据的增加会分配更多的部分,并自动创建新的分区和本地索引。
CREATE TABLE SALES_PART
(TIME_ID NUMBER,
REGION_ID NUMBER,
ORDER_ID NUMBER,
ORDER_DATE DATE,
SALES_QTY NUMBER(10,2),
SALES_AMOUNT NUMBER(12,2)
)
PARTITION BY RANGE (ORDER_DATE)
INTERVAL (NUMTOYMINTERVAL(1,'month')
(PARTITION p_first VALUES LESS THAN ('01-JAN-2006');
(TIME_ID NUMBER,
REGION_ID NUMBER,
ORDER_ID NUMBER,
ORDER_DATE DATE,
SALES_QTY NUMBER(10,2),
SALES_AMOUNT NUMBER(12,2)
)
PARTITION BY RANGE (ORDER_DATE)
INTERVAL (NUMTOYMINTERVAL(1,'month')
(PARTITION p_first VALUES LESS THAN ('01-JAN-2006');
Numtoyminterval功能把数字转换成 INTERVAL YEAR TO MONTH文字(‘YEAR’ or ’MONTH’)。
进行Interval分区的表格有传统的范围部分和自动生成的interval部分。进行范围分区的表格可以通过使用ALTER TABLE命令的 SET
INTERVAL选项扩展成为Interval分区的表格。
1 create table graderecord
2 (
3 sno varchar2(10),
4 sname varchar2(20),
5 dormitory varchar2(3),
6 grade int
7 )
8 partition by range(grade)
9 (
10 partition bujige values less than(60), --不及格
11 partition jige values less than(85), --及格
12 partition youxiu values less than(maxvalue) --优秀
13 )
2 (
3 sno varchar2(10),
4 sname varchar2(20),
5 dormitory varchar2(3),
6 grade int
7 )
8 partition by range(grade)
9 (
10 partition bujige values less than(60), --不及格
11 partition jige values less than(85), --及格
12 partition youxiu values less than(maxvalue) --优秀
13 )