我正在使用每天输入 3-5m 行的 Oracle 11g 数据库。将来我想使用基于列的分区Timestamp
。我的目标是每天自动创建一个新分区。
我刚刚找到了创建给定日期范围的方法,即 1-20,但不是无限时间(01.01.2014 到 mm.dd.yyyy)。
我正在使用每天输入 3-5m 行的 Oracle 11g 数据库。将来我想使用基于列的分区Timestamp
。我的目标是每天自动创建一个新分区。
我刚刚找到了创建给定日期范围的方法,即 1-20,但不是无限时间(01.01.2014 到 mm.dd.yyyy)。
对于每日范围,您可以这样做:
create table ...
...
interval(numtodsinterval(1, 'DAY'))
(
partition log_data_p1 values less than (to_date('22-04-2015', 'DD-MM-YYYY')),
partition log_data_p2 values less than (to_date('23-04-2015', 'DD-MM-YYYY'))
);
重要的是使用numtodsinterval
而不是numtoyminterval
Oracle 11g 确实提供了自动分区创建,您只需要使用正确的语法创建表,如下所示:
create table
pos_data (
start_date DATE,
store_id NUMBER,
inventory_id NUMBER(6),
qty_sold NUMBER(3)
)
PARTITION BY RANGE (start_date)
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
(
PARTITION pos_data_p2 VALUES LESS THAN (TO_DATE('1-7-2007', 'DD-MM-YYYY')),
PARTITION pos_data_p3 VALUES LESS THAN (TO_DATE('1-8-2007', 'DD-MM-YYYY'))
);
这里定义了两个分区,并指定了一个月的间隔。如果日期超过分区中指定的最大日期,则 oracle 会自动创建新分区。
同样,您可以为日期范围指定分区,oracle 将负责休息。