はい、エラーメッセージはやや誤解を招くことがありますが、Oracleがパーティションを自動的に作成する前に元のテーブルDDL内に最後にSTATICALLYで作成されたパーティションを参照しています。これを回避する唯一の方法は、あなたが使用していないし、この上の本当のパーティションをドロップするん確認している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'));
私はこれが自動的に作成されたと言うことができるパーティションの名前で、奇妙なことは、その前に静的に作成されたパーティションを削除できたということです。とにかく私はあなたの提案を試してみたかったと私はこのエラーが出てくる: テーブルを変更するTABLE1パーティションを追加するより小さい値('07 -JUL-09 11.59.00.000000000 PM '); エラー1行目: ORA-14760:パーティション分割されたオブジェクトにADD PARTITIONは許可されていません アイデアはありますか? ありがとう、 PJ –
申し訳ありませんが、おかげで感謝します:) –
うーん...私はあなたの問題に遭遇し、私の場合は、静的対動的位置付けの問題でした。私がMINVALパーティションについて言及したとき、私はこの単一のパーティション(およびパーティション分割が定義されている)を使用してテーブルを再作成し、データを再挿入することを考えていました。 – dpbradley