日本語PDF

4.3 パーティションでサポートされているメンテナンス操作

パーティション、サブパーティションおよび索引パーティションで実行できる、様々なメンテナンス操作があります。

次の表およびトピックで、パーティション、サブパーティションおよび索引パーティションでサポートされているメンテナンス操作について説明します。

表4-1および表4-2にパーティション化およびサブパーティション化の種類ごとに、メンテナンス操作の実行に使用されるALTER TABLE文の特定の句が示されます。

ノート:

複数のパーティションのパーティション・メンテナンス操作は、ドメイン索引を使用した表でサポートされていません。

表4-1 表パーティションに対するALTER TABLEメンテナンス操作

メンテナンス操作 レンジ・コンポジット・レンジ - * 時間隔コンポジット時間隔 - * ハッシュ リスト・コンポジット・リスト - * 参照

パーティションの追加。「パーティションおよびサブパーティションの追加について」を参照してください

ADD PARTITION、単一および複数のパーティション

該当なし

ADD PARTITION

ADD PARTITION、単一および複数のパーティション

該当なし。(これらの操作は、参照パーティション表では実行できません。これらの操作は、親表で実行するとすべての子表にカスケードされます。)

パーティションの結合。「パーティションおよびサブパーティションの結合について」を参照してください

該当なし

該当なし

COALESCE PARTITION

該当なし

N/A (これらの操作は、参照パーティション表では実行できません。これらの操作は、親表で実行するとすべての子表にカスケードされます。)

パーティションの削除。「パーティションおよびサブパーティションの削除について」を参照してください

DROP PARTITION、単一および複数のパーティション

DROP PARTITION、単一および複数のパーティション

該当なし

DROP PARTITION、単一および複数のパーティション

N/A (これらの操作は、参照パーティション表では実行できません。これらの操作は、親表で実行するとすべての子表にカスケードされます。)

パーティションの交換。「パーティションおよびサブパーティションの交換について」を参照してください

EXCHANGE PARTITION

EXCHANGE PARTITION

EXCHANGE PARTITION

EXCHANGE PARTITION

EXCHANGE PARTITION

パーティションのマージ。「パーティションおよびサブパーティションのマージについて」を参照してください

MERGE PARTITIONS、単一および複数のパーティション

MERGE PARTITIONS、単一および複数のパーティション

該当なし

MERGE PARTITIONS、単一および複数のパーティション

N/A (これらの操作は、参照パーティション表では実行できません。これらの操作は、親表で実行するとすべての子表にカスケードされます。)

デフォルトの属性の変更について

MODIFY DEFAULT ATTRIBUTES

MODIFY DEFAULT ATTRIBUTES

MODIFY DEFAULT ATTRIBUTES

MODIFY DEFAULT ATTRIBUTES

MODIFY DEFAULT ATTRIBUTES

パーティションの実際の属性の変更について

MODIFY PARTITION

MODIFY PARTITION

MODIFY PARTITION

MODIFY PARTITION

MODIFY PARTITION

リスト・パーティションの変更について: 値の追加

該当なし

該当なし

該当なし

MODIFY PARTITION ADD VALUES

該当なし

リスト・パーティションの変更について: 値の削除

該当なし

該当なし

該当なし

MODIFY PARTITION DROP VALUES

該当なし

パーティションの移動。「パーティションおよびサブパーティションの移動について」を参照してください

MOVE SUBPARTITION

MOVE SUBPARTITION

MOVE PARTITION

MOVE SUBPARTITION

MOVE PARTITION

パーティション名の変更。「パーティションおよびサブパーティション名の変更について」を参照してください

RENAME PARTITION

RENAME PARTITION

RENAME PARTITION

RENAME PARTITION

RENAME PARTITION

パーティションの分割。「パーティションおよびサブパーティションの分割について」を参照してください

SPLIT PARTITION、単一および複数のパーティション

SPLIT PARTITION、単一および複数のパーティション

該当なし

SPLIT PARTITION、単一および複数のパーティション

N/A (これらの操作は、参照パーティション表では実行できません。これらの操作は、親表で実行するとすべての子表にカスケードされます。)

パーティションの切捨て。「パーティションおよびサブパーティションの切捨てについて」を参照してください

TRUNCATE PARTITION、単一および複数のパーティション

TRUNCATE PARTITION、単一および複数のパーティション

TRUNCATE PARTITION、単一および複数のパーティション

TRUNCATE PARTITION、単一および複数のパーティション

TRUNCATE PARTITION、単一および複数のパーティション

表4-2 表サブパーティションに対するALTER TABLEメンテナンス操作

メンテナンス操作 コンポジット* - レンジ コンポジット* - ハッシュ コンポジット* - リスト

サブパーティションの追加。「パーティションおよびサブパーティションの追加について」を参照してください

MODIFY PARTITION ADD SUBPARTITION、単一および複数のサブパーティション

MODIFY PARTITION ADD SUBPARTITION

MODIFY PARTITION ADD SUBPARTITION、単一および複数のサブパーティション

サブパーティションの結合。「パーティションおよびサブパーティションの結合について」を参照してください

該当なし

MODIFY PARTITION COALESCE SUBPARTITION

該当なし

サブパーティションの削除。「パーティションおよびサブパーティションの削除について」を参照してください

DROP SUBPARTITION、単一および複数のサブパーティション

該当なし

DROP SUBPARTITION、単一および複数のサブパーティション

サブパーティションの交換。「パーティションおよびサブパーティションの交換について」を参照してください

EXCHANGE SUBPARTITION

該当なし

EXCHANGE SUBPARTITION

サブパーティションのマージ。「パーティションおよびサブパーティションのマージについて」を参照してください

MERGE SUBPARTITIONS、単一および複数のサブパーティション

該当なし

MERGE SUBPARTITIONS、単一および複数のサブパーティション

デフォルトの属性の変更について

MODIFY DEFAULT ATTRIBUTES FOR PARTITION

MODIFY DEFAULT ATTRIBUTES FOR PARTITION

MODIFY DEFAULT ATTRIBUTES FOR PARTITION

サブパーティションの実際の属性の変更。「パーティションの実際の属性の変更について」を参照してください

MODIFY SUBPARTITION

MODIFY SUBPARTITION

MODIFY SUBPARTITION

リスト・サブパーティションの変更。「リスト・パーティションの変更について: 値の追加」を参照してください

該当なし

該当なし

MODIFY SUBPARTITION ADD VALUES

リスト・サブパーティションの変更。「リスト・パーティションの変更について: 値の削除」を参照してください

該当なし

該当なし

MODIFY SUBPARTITION DROP VALUES

サブパーティション・テンプレートの変更

SET SUBPARTITION TEMPLATE

SET SUBPARTITION TEMPLATE

SET SUBPARTITION TEMPLATE

サブパーティションの移動。「パーティションおよびサブパーティションの移動について」を参照してください

MOVE SUBPARTITION

MOVE SUBPARTITION

MOVE SUBPARTITION

サブパーティション名の変更。「パーティションおよびサブパーティション名の変更について」を参照してください

RENAME SUBPARTITION

RENAME SUBPARTITION

RENAME SUBPARTITION

サブパーティションの分割。「パーティションおよびサブパーティションの分割について」を参照してください

SPLIT SUBPARTITION、単一および複数のサブパーティション

該当なし

SPLIT SUBPARTITION、単一および複数のサブパーティション

サブパーティションの切捨て。「パーティションおよびサブパーティションの切捨てについて」を参照してください

TRUNCATE SUBPARTITION、単一および複数のサブパーティション

TRUNCATE SUBPARTITION、単一および複数のサブパーティション

TRUNCATE SUBPARTITION、単一および複数のサブパーティション

ノート:

ビットマップ索引のあるパーティション表や、現在圧縮されていないパーティションのみを含むパーティション表に、圧縮されたパーティションを組み込むために最初に表圧縮を使用する場合は、次の手順を実行する必要があります。

  • 既存のすべてのビットマップ索引およびビットマップ索引パーティションを削除するか、UNUSABLEとマークします。

  • 表圧縮属性を設定します。

  • 索引を再作成します。

これらの処理は、パーティションにデータが含まれているかどうかには関係なく、圧縮されたパーティションを組み込む操作です。

これは、Bツリー索引を含むパーティション表、またはパーティション索引構成表には適用されません。

表4-3に索引パーティションで実行可能なメンテナンス操作を示し、どのタイプの索引(グローバルまたはローカル)で実行可能かを記載します。メンテナンス操作に使用するALTER INDEX句を表示します。

グローバル索引は、基礎となる表の構造を反映しません。パーティション化されている場合は、レンジまたはハッシュでパーティション化できます。

ローカル索引では基礎となる表の構造が反映されるため、表パーティションおよびサブパーティションがメンテナンス・アクティビティの影響を受けると、パーティション化も自動的にメンテナンスされます。そのため、ローカル索引でのパーティション・メンテナンスの必要性は低く、オプションの数も少なくなっています。

表4-3 索引パーティションに対するALTER INDEXメンテナンス操作

メンテナンス操作 索引のタイプ 索引パーティション化のタイプ
レンジ ハッシュおよびリスト コンポジット

索引パーティションの追加

グローバル

-

ADD PARTITION(ハッシュのみ)

-

索引パーティションの追加

ローカル

該当なし

該当なし

該当なし

索引パーティションの削除

グローバル

DROP PARTITION

-

-

索引パーティションの削除

ローカル

該当なし

該当なし

該当なし

索引パーティションのデフォルト属性の変更

グローバル

MODIFY DEFAULT ATTRIBUTES

-

-

索引パーティションのデフォルト属性の変更

ローカル

MODIFY DEFAULT ATTRIBUTES

MODIFY DEFAULT ATTRIBUTES

MODIFY DEFAULT ATTRIBUTES

MODIFY DEFAULT ATTRIBUTES FOR PARTITION

索引パーティションの実際の属性の変更

グローバル

MODIFY PARTITION

-

-

索引パーティションの実際の属性の変更

ローカル

MODIFY PARTITION

MODIFY PARTITION

MODIFY PARTITION

MODIFY SUBPARTITION

索引パーティションの再作成について

グローバル

REBUILD PARTITION

-

-

索引パーティションの再作成について

ローカル

REBUILD PARTITION

REBUILD PARTITION

REBUILD SUBPARTITION

索引パーティション名の変更について

グローバル

RENAME PARTITION

-

-

索引パーティション名の変更について

ローカル

RENAME PARTITION

RENAME PARTITION

RENAME PARTITION

RENAME SUBPARTITION

索引パーティションの分割

グローバル

SPLIT PARTITION

-

-

索引パーティションの分割

ローカル

該当なし

該当なし

該当なし

4.3.1 索引の自動更新

パーティション表および索引に対する個々のメンテナンス操作を説明する前に、ALTER TABLE文に指定可能なUPDATE INDEXES句の影響を説明します。

デフォルトでは、パーティション表に対する表メンテナンス操作の多くにより、対応する索引または索引パーティションが無効化(UNUSABLEとマーク)されます。索引全体または各パーティション(グローバル索引の場合)を再作成する必要があります。メンテナンス操作で、ALTER TABLE文にUPDATE INDEXESを指定すると、データベースによりこのデフォルトの動作が上書きされます。この句を指定すると、メンテナンス操作のDDL文の実行時に、データベースにより索引が更新されます。これには、次の利点があります。

  • 索引が、ベース表操作とともに更新されます。後で更新して、個別に索引を再作成する必要はありません。

  • グローバル索引はUNUSABLEとマークされないため、高い可用性を備えています。パーティションDDLの実行中でもこれらの索引は使用可能なままで、表内の影響を受けないパーティションにアクセスできます。

  • すべての無効な索引を再作成するために、名前を調べる必要はありません。

ローカル索引のオプションの句で、更新されたローカル索引やそのパーティションに物理特性および記憶域特性を指定できます。

  • 各ローカル索引のそれぞれのパーティションに物理属性、表領域記憶域およびロギングを指定できます。または、PARTITIONキーワードのみを指定して、次のようにデータベースによるパーティション属性の更新を行うことも可能です。

    • 単一の表パーティションに対する操作(MOVE PARTITIONSPLIT PARTITIONなど)では、対応する索引パーティションは影響を受ける表パーティションの属性を継承します。データベースでは新しい索引パーティションの名前は生成されないため、この操作により作成される新しい索引パーティションは、対応する新しい表パーティションから名前を継承します。

    • MERGE PARTITION操作の場合、この操作によって作成されたローカル索引パーティションは、作成された表パーティションの名前とローカル索引の属性を継承します。

  • コンポジット・パーティション索引では、各サブパーティションに表領域記憶域を指定できます。

次の操作では、UPDATE INDEXES句がサポートされています。

  • ADD PARTITION | SUBPARTITION

  • COALESCE PARTITION | SUBPARTITION

  • DROP PARTITION | SUBPARTITION

  • EXCHANGE PARTITION | SUBPARTITION

  • MERGE PARTITION | SUBPARTITION

  • MOVE PARTITION | SUBPARTITION

  • SPLIT PARTITION | SUBPARTITION

  • TRUNCATE PARTITION | SUBPARTITION

SKIP_UNUSABLE_INDEXES初期化パラメータ

SKIP_UNUSABLE_INDEXESは、デフォルト値がTRUEの初期化パラメータです。この設定により、UNUSABLEとマークされた索引および索引パーティションのエラー・レポートが無効化されます。使用できない要素を避けるために、データベースが別の実行計画を選択しないようにするには、このパラメータをFALSEに設定する必要があります。

索引を自動更新する際の考慮事項

UPDATE INDEXESを指定する際は、次の影響に注意してください。

  • 事前にUNUSABLEとマークされていた索引が更新されるため、パーティションDDL文の実行時間が長くなる可能性があります。ただし、この増加した時間を、索引を更新せずにDDLを実行し、すべての索引を再作成する場合にかかる時間と比較する必要があります。パーティションのサイズが表サイズの5%に満たない場合は、経験則から言って、索引を更新する方が短時間ですみます。

  • EXCHANGE操作が高速な操作ではなくなりました。こちらも、DDLを実行してすべての索引を再作成する場合にかかる時間と比較する必要があります。

  • グローバル索引を含む表を更新する際の考慮事項は、次のとおりです。

    • 索引はその場で更新されます。索引の更新は記録され、REDOおよびUNDOレコードが生成されます。反対に、グローバル索引全体を再作成する場合は、NOLOGGINGモードで実行できます。

    • 索引全体を手動で再作成すると、領域がより有効に使用されて圧縮されるため、より効率的な索引が作成されます。

  • UPDATE INDEXES句は、索引構成表ではサポートされていません。ただし、DROP PARTITIONTRUNCATE PARTITIONおよびEXCHANGE PARTITION操作でUPDATE GLOBAL INDEXES句を使用して、索引構成表のグローバル索引を使用可能なままにできます。前述のリストのその他の操作では、索引構成表のグローバル索引は使用可能なままになります。また、索引構成表のローカル索引パーティションは、MOVE PARTITION操作後も使用可能なままです。

関連項目:

索引の更新の構文のALTER TABLEupdate_all_indexes_clauseの詳細は、『Oracle Database SQL言語リファレンス』を参照してください

4.3.2 パーティションを削除および切り捨てる非同期グローバル索引メンテナンス

パーティション・メンテナンス操作DROP PARTITIONおよびTRUNCATE PARTITIONは、メタデータのみの索引メンテナンスを実行して最適化されます。

DROPおよびTRUNCATEの非同期グローバル索引メンテナンスはデフォルトで実行されますが、UPDATE INDEXES句が下位互換性のために引き続き必要です。

次のリストは、非同期グローバル索引メンテナンスの制限事項をまとめています。

  • ヒープ表にのみ実行されます

  • オブジェクト型を含む表はサポートされません

  • ドメイン索引を含む表はサポートされません

  • ユーザーSYSには実行されません

索引のメンテナンス操作は、自動スケジューラ・ジョブSYS.PMO_DEFERRED_GIDX_MAINT_JOBを使用して実行し、すべてのグローバル索引をクリーンアップできます。デフォルトでは、このジョブは定期的に実行するようスケジュールされます。索引を事前にクリーンアップする場合、DBMS_SCHEDULER.RUN_JOBを使用していつでもこのジョブを実行できます。ジョブを変更して、特定の要件に基づくスケジュールで実行することもできます。ジョブを削除しないことをお薦めします。

次のオプションのいずれかを使用して、メンテナンスを必要とする索引のクリーンアップを強制することもできます。

  • DBMS_PART.CLEANUP_GIDX - このPL/SQLプロシージャは、クリーンアップを必要とする可能性があるシステムのグローバル索引のリストを収集し、索引をクリーンな状態にリストアするために必要な操作を実行します。

  • ALTER INDEX REBUILD [PARTITION] – このSQL文は、Oracle Database 12cリリース1 (12.1)より前のリリースで実行されるように、索引全体または索引パーティションを再作成します。結果の索引(パーティション)は、古いエントリを含みません。

  • ALTER INDEX [PARTITION] COALESCE CLEANUP - このSQL文は、索引ブロックの親がないエントリをクリーンアップします。

関連項目:

Oracle Schedulerによるジョブの管理の詳細は、『Oracle Database管理者ガイド』を参照してください

4.3.3 サブパーティション・テンプレートの変更

新しいサブパーティション・テンプレートと置き換えることで、コンポジット・パーティション表のサブパーティション・テンプレートを変更できます。

サブパーティション・テンプレートを使用する後続の操作(ADD PARTITIONまたはMERGE PARTITIONSなど)で、新しいサブパーティション・テンプレートが使用されます。既存のサブパーティションは変更されません。

時間隔 - *コンポジット・パーティション表のサブパーティション・テンプレートを変更すると、作成されていない時間隔パーティションに新しいサブパーティション・テンプレートが使用されます。

新しいサブパーティション・テンプレートを指定するには、ALTER TABLE SET SUBPARTITION TEMPLATE文を使用します。例:

ALTER TABLE employees_sub_template
   SET SUBPARTITION TEMPLATE
         (SUBPARTITION e TABLESPACE ts1,
          SUBPARTITION f TABLESPACE ts2,
          SUBPARTITION g TABLESPACE ts3,
          SUBPARTITION h TABLESPACE ts4
         );

空のリストを指定することで、サブパーティション・テンプレートを削除できます。

ALTER TABLE employees_sub_template
   SET SUBPARTITION TEMPLATE ( );

4.3.4 メンテナンス操作のフィルタ処理

パーティション・メンテナンス操作は、データのフィルタ処理の追加をサポートするため、パーティションとデータ・メンテナンスを組み合せることができます。

フィルタ処理されたパーティション・メンテナンス操作は、パーティション・メンテナンスの一部としてデータのフィルタ処理を満たすデータのみを保持します。データのフィルタ処理の機能は、MOVE PARTITIONMERGE PARTITIONおよびSPLIT PARTITIONに適用されます。

例4-27に、ALTER TABLE文を使用してオープンでない注文(クローズ済注文)をすべて削除すると同時にパーティションを移動する方法を示します。

パーティション表にはフィルタ処理述語が必要です。また、オンラインで実行できるすべてのパーティション・メンテナンス操作(MOVEおよびSPLIT)は、フィルタ処理されたパーティション・メンテナンス操作として実行することもできます。ONLINEを指定すると、メンテナンス対象のパーティションに対するDML操作が許可されます。

オンライン・モードで実行されるフィルタ処理されたパーティション・メンテナンス操作は、同時進行中のDML操作にフィルタ述語を使用しません。フィルタ条件は、パーティション・メンテナンス操作の最初に一度だけ適用されます。そのため、後続のDMLは成功しますが、フィルタ処理の観点からは無視されます。どのようなDML操作であっても、パーティション・メンテナンスの開始時にフィルタ条件に一致しないレコードは保持されません。新しく挿入されたレコードは、パーティション・メンテナンス操作のフィルタ条件を満たすかどうかに関係なく、パーティション・キー基準に一致すると挿入されます。フィルタ条件はパーティション表自体に制限され、結合や副問合せ式など、他の表への参照は許可されません。

キーワードONLINE例4-27のSQL文で指定されている、次のシナリオを考えてみます。

  • パーティション・メンテナンス操作の開始後にstatus='open'に更新されるパーティションq1_2016の既存の注文レコードが、このパーティションに保持されていません。

  • パーティション・メンテナンス操作の開始後およびパーティション・メンテナンス操作の進行中に、status='closed'の新しい注文レコードをパーティションq1_2016に挿入できます。

例4-27 メンテナンス操作実行時のフィルタ処理句の使用

ALTER TABLE orders_move_part
  MOVE PARTITION q1_2016 TABLESPACE open_orders COMPRESS ONLINE
  INCLUDING ROWS WHERE order_state = 'open';

関連項目:

パーティション表や索引を作成および変更するためのパーティション化句の正確な構文、その使用に関する制限、および表の作成や変更に必要な特定の権限の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。