グローバルインデックスを使用可能なままパーティションをTRUNCATE/DROP
Oracleパーティション化コマンド
-- Empty a partition / remove a partition (global indexes stay maintained):
ALTER TABLE customer_app.sale_part TRUNCATE PARTITION p2025 UPDATE INDEXES;
ALTER TABLE customer_app.sale_part DROP PARTITION p2025 UPDATE INDEXES;
-- 12c+ asynchronous global index maintenance: index is VALID but carries orphaned entries
SELECT index_name, status, orphaned_entries
FROM dba_indexes
WHERE owner = 'CUSTOMER_APP' AND table_name = 'SALE_PART';
-- Clean orphaned entries now (normally SYS.PMO_DEFERRED_GIDX_MAINT_JOB does it at night):
EXEC DBMS_PART.CLEANUP_GIDX(schema_name_in => 'CUSTOMER_APP', table_name_in => 'SALE_PART');
-- or a single index: ALTER INDEX customer_app.sale_part_id_gidx COALESCE CLEANUP;
-- Target the partition by value instead of name:
-- ALTER TABLE customer_app.sale_part DROP PARTITION FOR (DATE '2025-06-15') UPDATE INDEXES;概要
行単位のDELETEではなく、パーティションレベルで古いデータを即座に削除する。12c以降、UPDATE INDEXESはすべてのエントリを更新する代わりにディクショナリ上でグローバルインデックスにマークを付けるのみ(非同期メンテナンス)。インデックスは直ちに使用可能なままで、孤立エントリは後でクリーンアップされる。
使用する場面
データ保存ポリシーに基づく古い期間のパージ、ILM/パージジョブ、大規模な表でのDELETEによるUNDO/REDO負荷の回避に。
注意
Partitioningオプション(EEの有償オプション)が必要。DROP/TRUNCATEは元に戻せない(flashback tableではパーティションは戻らない)。先にバックアップするか交換でアーカイブする。UPDATE INDEXESを忘れるとグローバルインデックスがUNUSABLEになり、クエリでORA-01502が発生する場合がある。子表が参照している(FK)場合、操作は失敗する。インターバル表では最後のレンジ(遷移)パーティションは削除できない。