パーティションにデータが含まれている場合や、表に1つ以上のグローバル索引が定義されている場合には、次のいずれかの方法(方法1、2または3)を使用して表パーティションを削除します。
方法1
グローバル索引をメンテナンスせずにALTER
TABLE
DROP
PARTITION
文を発行します。その後、索引(または索引パーティション)がUNUSABLE
とマークされるため、(パーティション化されているかどうかに関係なく)すべてのグローバル索引を再作成する必要があります。次の文で、sales
表からパーティションdec98
を削除し、パーティション化されていないグローバル索引を再作成する例を示します。
ALTER TABLE sales DROP PARTITION dec98; ALTER INDEX sales_area_ix REBUILD;
索引sales_area_ix
がレンジ・パーティション・グローバル索引の場合には、その索引のすべてのパーティションを再作成する必要があります。さらに、1文で索引のすべてのパーティションを再作成することはできません。索引の各パーティションに対して、別々にREBUILD
文を発行する必要があります。次の文では、索引パーティションjan99_ix
からdec99_ix
を再作成します。
ALTER INDEX sales_area_ix REBUILD PARTITION jan99_ix; ALTER INDEX sales_area_ix REBUILD PARTITION feb99_ix; ALTER INDEX sales_area_ix REBUILD PARTITION mar99_ix; ... ALTER INDEX sales_area_ix REBUILD PARTITION dec99_ix;
これは、削除されるパーティションに表の合計データの大部分が含まれる大規模な表に最適な方法です。非同期グローバル索引メンテナンスは、索引メンテナンスを必要とせずにグローバル索引を有効なまま保持しますが、UPDATE
INDEXES
句を使用してこの新しい機能を有効にする必要があります。この動作によって、下位互換性が保証されます。
方法2
ALTER
TABLE
DROP
PARTITION
文を発行する前に、DELETE
文を発行してパーティションからすべての行を削除します。DELETE
文により、グローバル索引が更新されます。
たとえば、最初のパーティションを削除するには、次の文を発行します。
DELETE FROM sales partition (dec98); ALTER TABLE sales DROP PARTITION dec98;
これは、小規模な表、または削除されるパーティションに含まれる表の合計データの割合が少ない場合に、大規模な表に最適な方法です。
方法3
ALTER
TABLE
文にUPDATE
INDEXES
を指定します。実行すると、新しい非同期グローバル索引メンテナンスが利用されます。索引は有効なまま変化しません。
ALTER TABLE sales DROP PARTITION dec98 UPDATE INDEXES;