У меня есть таблица с огромным объемом данных. Мне нужно, чтобы разбиение выполнялось ежедневно автоматически. Мне нужно, чтобы имя раздела было датой sysdate. Как я могу это сделать?
Автоматическое разбиение на разделы в Oracle11g
Ответы (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.