Oracle 11gを使用しています。
パーティションを削除し、グローバルインデックスを再構築する必要があります。以下のクエリはうまく機能しますが、インデックスが再構築されるまで、テーブルに対するすべてのDML操作をブロックします。
ALTER TABLE ABC DROP PARTITION PART1 UPDATE GLOBAL INDEXES;
しかし、クエリを2つの部分に分割し、ONLINEオプションを使用してインデックスを個別に再構築すると、インデックスの再構築中にDMLクエリがブロックされません
ALTER TABLE ABC DROP PARTITION PART1;
ALTER INDEX XYZ REBUILD ONLINE;
このアプローチの欠点は、パーティションの削除を実行してからインデックスを再構築するまでの時間です。これらのインデックスは使用できなくなり、パフォーマンスの問題が発生する可能性があります。
だから私の質問は、パーティションを削除して1つのクエリで「オンライン」でインデックスを再構築できるオプションはあるのでしょうか。現在、次のオプションがあるとは思いません。
ALTER TABLE ABC DROP PARTITION PART1 UPDATE GLOBAL INDEXES ONLINE;
11gではありません。
12cでもそうではありませんが、12cは生活を少し楽にします。より適切な時間まで「再構築」の部分を遅らせることができます。
12cには、 非同期グローバルインデックスメンテナンス と呼ばれる新しい機能があります。パーティションを削除しても、グローバルインデックスは使用可能なままになり、不要になったインデックスエントリは孤立したものとしてマークされます。その後、このインデックス(DBMS_PART.CLEANUP_GIDX
、またはALTER INDEX COALESCE CLEANUP
)をクリーンアップするか、データベースで自動的にクリーンアップすることもできます(PMO_DEFERRED_GIDX_MAINT_JOB
と呼ばれる事前定義されたジョブがあります) )。