Oracle12cデータベースとパーティションテーブルがあります。全体の27%である68734MBの古いパーティションがあります。

このパーティションを削除する必要があります。これは本番データベースであり、このためのダウンタイムウィンドウはありません。

このパーティションを削除したかどうかを知りたいのですが、このテーブルのインデックスは使用できなくなりますか、それとも再構築されますか?ライブトラフィックへの影響を最小限に抑えてこのパーティションを削除するための最良の戦略は何でしょうか?

コメント

  • インデックスによって異なります。グローバルインデックスを再構築する必要があります。

回答

1つ以上のパーティションを削除すると、ローカルインデックスはまた落ちた。 ALTER TABLE DROP PARTITIONUPDATE INDEXESまたはUPDATE GLOBAL INDEXES句が指定されていない限り、グローバルインデックスを再構築する必要があります。ステートメント。

たとえば、範囲パーティションとグローバルインデックスを持つTBL1というテーブルがあります。

SQL> select p.index_name, p.partition_name,p.status from dba_ind_partitions p, dba_indexes i where i.index_name=p.index_name and table_name="TBL1"; INDEX_NAME PARTITION_ STATUS ---------- ---------- -------- T_INDEX GI3 USABLE T_INDEX GI2 USABLE T_INDEX GI1 USABLE SQL> alter table tbl1 drop partition p0 UPDATE GLOBAL INDEXES; Table altered. SQL> select p.index_name, p.partition_name,p.status from dba_ind_partitions p, dba_indexes i where i.index_name=p.index_name and table_name="TBL1"; INDEX_NAME PARTITION_ STATUS ---------- ---------- -------- T_INDEX GI3 USABLE T_INDEX GI2 USABLE T_INDEX GI1 USABLE 

ご覧のとおり、UPDATE GLOBAL INDEXES句を指定すると、グローバルインデックスが使用できなくなります。

パーティションを削除した後、インデックスエントリは属します。クエリがこれらのインデックスを使用する場合、それらは単にそのようなエントリを無視します(孤立)。通常のメンテナンスウィンドウでそのような孤立したエントリをクリーンアップできます。詳細は次のドキュメントにも記載されています。

パーティションのメンテナンス操作DROPPARTITIONとTRUNCATEPARTITIONは、メタデータのみのインデックスメンテナンスを行うことで最適化されます。

いずれの場合も、パーティションの削除または切り捨てすぐに完了し、インデックスは常にavです使用できず、インデックスの保守は延期されます

ドキュメント:

  • パーティションの削除と切り捨てのための非同期グローバルインデックスのメンテナンス
  • Oracle Database12cの場合

    コメント

    • これは非常に役立つ情報です。このパーティションに最も多くのデータがあることを考えると、この操作の期間について何か考えがありますか?数時間かかりますか、それともパーティションのドロップが妥当な時間発生しますか? (秒または分単位で)
    • 上記で引用した最後の文によると、パーティションの実際の削除はメタデータ操作であるため、少数のレコードの更新のみが含まれます。基本的には迅速です。
  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です