按照时间,每天分区
create table test_p(id number,createtime date)
partition by range(createtime) interval(numtodsinterval(1,'day')) store in (users)
(
partition test_p_p1 values less than(to_date('20140110','yyyymmdd'))
);
create index index_test_p_id on test_p(id) local;
create index index_test_p_createtime test_p(createtime) local;
按照数字,200000一个分区
create table test_p(id number,createtime date)
partition by range(id) interval(200000) store in (users)
(
partition test_p_p1 values less than(200000)
);
create index index_test_p_id on test_p(id) local;
create index index_test_p_createtime test_p(createtime) local;
interval-partitioned table(间隔分区表),即由oracle数据库在间隔分区表上自动创建分区,无需再自己写存储过程或其他脚本来实现自动创建分区了。当然,间隔分区表的分区指定列只能为表的单个列,且该列只能为NUMBER或DATE类型。 间隔分区必须是基于范围分区,可以只是范围分区,也可以是组合分区如RANGE-LIST、RANGE-HASH等。
EXP 创建按月间隔分区表
CREATE TABLE tab_part_month
(
t_id NUMBER,
t_date DATE,
t_txt VARCHAR2(20)
)
PARTITION BY RANGE(t_date)
INTERVAL (numtoyminterval(1,'month'))
(
PARTITION p0 VALUES LESS THAN(to_date('20080101','yyyymmdd')),
PARTITION p1 VALUES LESS THAN(to_date('20090101','yyyymmdd'))
);
INSERT INTO tab_part_month
VALUES(1,to_date('20070301','yyyymmdd'),'hihi');
INSERT INTO tab_part_month
VALUES(1,to_date('20080301','yyyymmdd'),'hihi');
INSERT INTO tab_part_month
VALUES(1,to_date('20100301','yyyymmdd'),'hihi');
备注:这是一个按月间隔分区表,分区列为t_date日期列,INTERVAL (numtoyminterval(1,'month'))即为间隔分区的语句,数字1指定间隔频率,此时为按月分区,如果改为3则为每3个月分一个区,按日间隔分区将其改以下语句:INTERVAL (Numtodsinterval(10,'DAY'))。在上面语句中,CREATE语句中创建了p0、p1分区,在执行完前两条INSERT语句后该表分区并未增加,直到插入第三条语句后数据库自动增加一个新分区。