Автоматическое разбиение на разделы в Oracle11g

У меня есть таблица с огромным объемом данных. Мне нужно, чтобы разбиение выполнялось ежедневно автоматически. Мне нужно, чтобы имя раздела было датой sysdate. Как я могу это сделать?


person user1947949    schedule 04.01.2013    source источник


Ответы (1)


В настоящее время (11gR2) нет способа указать имя для автоматически сгенерированных разделов в таблице с интервальным разделением. См. Часто задаваемые вопросы об интервальном разбиении [ID 1479115.1] (требуется учетная запись службы поддержки Oracle ):

Какие будут имена автоматически созданных интервальных разделов?

[...] В настоящее время невозможно указать маску или шаблон для имен разделов, но сгенерированное системой имя можно переименовать [...]

Вы также ограничены столбцом ключа раздела, который должен быть типа DATE или NUMBER, и некоторыми другими вещами (см. это примечание).

Вы можете следовать примеру в разделе Создание разделов. документация по синтаксису:

create table foo (date_created date, ...)
  partition by range(date_created)
  interval(numtodsinterval(1, 'DAY'))
  (partition one values less than (to_date('01012013', 'DDMMYYYY')));

С учетом вышеизложенного новый раздел будет создаваться всякий раз, когда вы вставляете строку со значением даты в этом году или позже. Новые разделы не будут создаваться до 2013 года.

Чтобы обойти проблему с именем раздела (если это вообще необходимо), вы можете переименовать разделы на основе HIGH_VALUE в USER_TAB_PARTITIONS, хотя это звучит не очень красиво.
Другой вариант — вообще не переименовывать их и использовать этот синтаксис, когда вы хотите запросить определенный раздел:

select *
from foo
partition for (<the day you're interested in>);

См., например: Советы по интервальному разбиению Oracle.

person Mat    schedule 04.01.2013
comment
Извините, я забыл дать одну информацию. В моей таблице у меня нет столбца с текущей датой. В таком случае, могу ли я сделать разбиение на основе (SYSDATE). Я хочу, чтобы раздел был сделан на основе того, когда данные были вставлены в таблицу. - person user1947949; 04.01.2013
comment
Затем вам нужно добавить столбец для даты. Альтернативы нет. Вы можете представить вычисляемый столбец для разделения, но это не сработает для того, что вы пытаетесь сделать. - person Mat; 04.01.2013