120 DBMS_PCLXUTIL
DBMS_PCLXUTIL
パッケージによって、パーティション単位でローカル索引を作成するためのパーティション内並列性が提供されます。各パーティションには1つの並列実行サーバー・プロセスしか使用されないため、ローカル索引の作成においてパーティション数で並列度が限定されるという制限をDBMS_PCLXUTIL
によって回避します。
参照:
パーティションおよび索引に関しては、いくつかのルールがあります。詳細は、『Oracle Database概要』および『Oracle Database管理者ガイド』を参照してください。
この章のトピックは、次のとおりです:
120.1 DBMS_PCLXUTILの概要
DBMS_PCLXUTIL
はDBMS_JOB
パッケージを使用して、パーティション表のローカル索引を作成するための高い並列度を提供します。これは、バックグラウンド・プロセスを使用した(DBMS_SCHEDULER
を使用)非同期のパーティション間並列性と、パラレル実行サーバーを使用したパーティション内並列性の組合せで実現されます。
DBMS_PCLXUTIL
は、レンジ・パーティション化およびレンジ-ハッシュ・コンポジット・パーティション化の両方で機能します。
DBMS_PCLXUTIL
パッケージは、次のDBAタスク中に使用できます。
-
ローカル索引の作成
プロシージャ
BUILD_PART_INDEX
は、ローカル索引のディクショナリ情報がすでに存在していることを前提としています。これは、UNUSABLE
オプションを持つCREATE INDEX SQLコマンドを発行して行います。CREATE INDEX <idx_name> on <tab_name>(...) local(...) unusable;
これにより、索引作成で時間がかかるディクショナリ・エントリの作成を、索引自体を作成せずに行うことができます。そして、プロシージャ
BUILD_PART_INDEX
を起動して、指定の並列度でローカル索引の同時作成を行います。EXECUTE dbms_pclxutil.build_part_index(4,4,<tab_name>,<idx_name>,FALSE);
コンポジット・パーティションについて、プロシージャは、そのコンポジット表のすべてのサブパーティションに対するローカル索引を自動的に作成します。
-
ローカル索引のメンテナンス
目的のパーティションを使用可能または使用禁止にマークし、
BUILD_PART_INDEX
プロシージャもローカル索引の選択的な再作成を可能にします。force_opt
パラメータは、これを上書きし、すべてのパーティションに対するローカル索引の作成方法を提供します。ALTER INDEX <idx_name> local(...) unusable;
目的の(サブ)パーティション(UNUSABLEとマークされています)のみを再作成します。
EXECUTE dbms_pclxutil.build_part_index(4,4,<tab_name>,<idx_name>,FALSE);
force_opt
=TRUE
を使用して、すべての(サブ)パーティションを再作成します。EXECUTE dbms_pclxutil.build_part_index(4,4,<tab_name>,<idx_name>,TRUE);
進捗レポートが作成され、プログラムの終了時に出力がスクリーンに表示されます(
DBMS_OUTPUT
パッケージは、最初にメッセージをバッファに書き込み、そのバッファをプログラムの終了時のみスクリーンにフラッシュするためです)。
120.3 DBMS_PCLXUTILの操作上のノート
DBMS_PCLXUTIL
では、各パーティションに対してジョブが発行されます。INIT
.ORA
パラメータのJOB_QUEUE_PROCESSES
を正しく設定して同時ジョブの数を制御するのは、ユーザーまたはDBAの責任です。正しい構文についての最小限度のエラー・チェックがあります。ジョブ・キュー・プロセスのトレース・ファイルに、エラーが報告されます。
120.4 DBMS_PCLXUTILのルールおよび制限
DBMS_PCLXUTIL
パッケージはDBMS_JOB
パッケージを使用しているため、DBMS_JOB
に関する次の制限事項があることに注意してください。
-
job_queue_processes
初期化パラメータの適切な値を決定する必要があります。BUILD_PART_INDEX
()をコールする前にジョブ・プロセスが開始されていない場合、パッケージは正しく機能しません。バックグラウンド・プロセスは、次のinit
.ora
パラメータで指定されます。
job_queue_processes=n #the number of background processes = n
-
障害の状態はトレース・ファイルにのみレポートされ(
DBMS_JOB
の制限事項)、ユーザーへの対話的なフィードバックはできません。このパッケージは、失敗メッセージを出力して未完了のジョブをキューから削除し、j*.trc
トレース・ファイルを調べるようにユーザーに要求します。
ノート:
レンジ・パーティション化の最小互換モードは8.0で、レンジ-ハッシュ・コンポジット・パーティション化の最小互換モードは8i です。
120.5 DBMS_PCLXUTILサブプログラムの要約
DBMS_PCLXUTIL
は、1つのサブプログラム、BUILD_PART_INDEX
プロシージャを使用します。
表120-1 DBMS_PCLXUTILパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
パーティション単位でローカル索引を作成するためのパーティション内並列性を提供します。 |
120.5.1 BUILD_PART_INDEXプロシージャ
このプロシージャは、パーティション単位でローカル索引を作成するためのパーティション内並列性を提供します。
構文
DBMS_PCLXUTIL.BUILD_PART_INDEX ( jobs_per_batch IN NUMBER DEFAULT 1, procs_per_job IN NUMBER DEFAULT 1, tab_name IN VARCHAR2 DEFAULT NULL, idx_name IN VARCHAR2 DEFAULT NULL, force_opt IN BOOLEAN DEFAULT FALSE);
パラメータ
表120-2 BUILD_PART_INDEXプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
パーティション単位のローカル索引同時作成の数。 |
|
各ローカル索引作成で使用されるパラレル実行サーバーの数(1 <= |
|
パーティション表の名前(表が存在しない、またはパーティション化されていない場合は例外が発生します)。 |
|
ローカル索引に指定する名前(ローカル索引が表 |
|
|
使用上のノート
このユーティリティは、表の所有者としてのみ実行でき、他のユーザーとしては実行できません。
例
PROJ001
とPROJ002
の2つのパーティション、およびローカル索引IDX
を持つ表PROJECT
が作成されるとします。
プロシージャBUILD_PART_INDEX(2,4,'PROJECT','IDX',TRUE)
へのコールによって、次の出力が作成されます。
SQLPLUS> EXECUTE dbms_pclxutil.build_part_index(2,4,'PROJECT','IDX',TRUE); Statement processed. INFO: Job #21 created for partition PROJ002 with 4 slaves INFO: Job #22 created for partition PROJ001 with 4 slaves