Oracle按天自动分区

use*_*207 5 oracle partitioning oracle11g oracle-sqldeveloper

我正在使用每天输入3-5m行的Oracle 11g数据库。将来,我想使用基于column的分区Timestamp。我的目标是每天自动创建一个新分区。

我只是找到了创建给定天数范围的方法,即1-20天,但没有无限的时间(2014年1月1日至mm.dd.yyyy)。

Har*_*ime 7

对于每日范围,您可以这样操作:

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'))
);
Run Code Online (Sandbox Code Playgroud)

重要numtodsinterval而不是使用numtoyminterval


Lok*_*esh 5

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')) 
); 
Run Code Online (Sandbox Code Playgroud)

在这里,已经定义了两个分区,并且指定了一个月的间隔。如果日期超过分区中指定的最大日期,则oracle会自动创建新分区。

同样,您可以为日范围指定分区,oracle将负责其余的工作。

  • 不需要NUMBER(3)之后的逗号。应为qty_sold NUMBER(3) (2认同)