Да, сообщение об ошибке несколько вводит в заблуждение, но оно относится к последнему СТАТИЧЕСКИ созданному разделу (в DDL исходной таблицы до того, как Oracle начал автоматически создавать разделы. Я думаю, что единственный способ избежать этого - создать искусственный раздел «MINVAL», который вы уверены, что никогда не будут использоваться, а затем сбросьте настоящие разделы выше этого.
[Редактировать после обмена комментариями]
Я предполагаю, что этот тестовый пример воспроизводит вашу проблему:
CREATE TABLE test
( t_time DATE
)
PARTITION BY RANGE (t_time)
INTERVAL(NUMTODSINTERVAL(1, 'DAY'))
( PARTITION p0 VALUES LESS THAN (TO_DATE('09-1-2009', 'MM-DD-YYYY')),
PARTITION p1 VALUES LESS THAN (TO_DATE('09-2-2009', 'MM-DD-YYYY')),
PARTITION p2 VALUES LESS THAN (TO_DATE('09-3-2009', 'MM-DD-YYYY')),
PARTITION p3 VALUES LESS THAN (TO_DATE('09-4-2009', 'MM-DD-YYYY'))
);
insert into test values(TO_DATE('08-29-2009', 'MM-DD-YYYY'));
insert into test values(TO_DATE('09-1-2009', 'MM-DD-YYYY'));
insert into test values(TO_DATE('09-3-2009', 'MM-DD-YYYY'));
insert into test values(TO_DATE('09-10-2009', 'MM-DD-YYYY'));
Когда я это делаю, я могу отбросить разделы p0, p1 и p2, но получаю сообщение об ошибке при попытке удалить p3, даже если за ним существует системный раздел.
Единственный обходной путь, который я смог найти, - это временно переопределить разделение таблицы:
alter table test set interval ();
а затем отбросьте раздел p3. Затем вы можете переопределить разделение в соответствии с исходной спецификацией:
alter table test set INTERVAL(NUMTODSINTERVAL(1, 'DAY'));
person
dpbradley
schedule
08.09.2009