2013-10-10 7 views
3

Я работаю с Oracle 11g DB, который имеет вход 3-5m строк в день. В будущем я хотел бы использовать разбиение на основе столбца Timestamp. Моя цель - создать новый раздел для каждого дня, автоматически.Oracle автоматическое разбиение по дням

Я только что нашел способы создания заданного диапазона дней, то есть 1-20, но не в течение неограниченного времени (с 01.01.2014 по mm.dd.yyyy).

ответ

3

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 автоматически создает новый раздел.

Аналогичным образом вы можете указать раздел для дневного диапазона, и оракул позаботится об отдыхе.

+1

запятая после NUMBER (3) не требуется. Должно быть qty_sold НОМЕР (3) –

2

Для ежедневных диапазонов вы можете сделать это следующим образом:

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

Смежные вопросы