プライマリ・コンテンツに移動
Oracle® Database VLDBおよびパーティショニング・ガイド
12c リリース1 (12.1)
B71291-10
目次へ移動
目次
索引へ移動
索引

前
次

データおよびグローバル索引を含む表からのパーティションの削除

パーティションにデータが含まれている場合や、表に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;