114 DBMS_PCLXUTIL

DBMS_PCLXUTILパッケージによって、パーティション単位でローカル索引を作成するためのパーティション内並列性が提供されます。各パーティションには1つの並列実行サーバー・プロセスしか使用されないため、ローカル索引の作成においてパーティション数で並列度が限定されるという制限をDBMS_PCLXUTILによって回避します。

参照:

パーティションおよび索引に関しては、いくつかのルールがあります。詳細は、『Oracle Database概要』および『Oracle Database管理者ガイド』を参照してください。

この章のトピックは、次のとおりです:

114.1 DBMS_PCLXUTILの概要

DBMS_PCLXUTILDBMS_JOBパッケージを使用して、パーティション表のローカル索引を作成するための高い並列度を提供します。これは、バックグラウンド・プロセスを使用した(DBMS_SCHEDULERを使用)非同期のパーティション間並列性と、パラレル実行サーバーを使用したパーティション内並列性の組合せで実現されます。

DBMS_PCLXUTILは、レンジ・パーティション化およびレンジ-ハッシュ・コンポジット・パーティション化の両方で機能します。

DBMS_PCLXUTILパッケージは、次のDBAタスク中に使用できます。

  1. ローカル索引の作成

    プロシージャ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); 
     

    コンポジット・パーティションについて、プロシージャは、そのコンポジット表のすべてのサブパーティションに対するローカル索引を自動的に作成します。

  2. ローカル索引のメンテナンス

    目的のパーティションを使用可能または使用禁止にマークし、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パッケージは、最初にメッセージをバッファに書き込み、そのバッファをプログラムの終了時のみスクリーンにフラッシュするためです)。

114.2 DBMS_PCLXUTILのセキュリティ・モデル

このユーティリティは、表の所有者としてのみ実行でき、他のユーザーとしては実行できません。

114.3 DBMS_PCLXUTILの使用上の注意

DBMS_PCLXUTILでは、各パーティションに対してジョブが発行されます。INIT.ORAパラメータのJOB_QUEUE_PROCESSESを正しく設定して同時ジョブの数を制御するのは、ユーザーまたはDBAの責任です。正しい構文についての最小限度のエラー・チェックがあります。ジョブ・キュー・プロセスのトレース・ファイルに、エラーが報告されます。

114.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 です。

114.5 DBMS_PCLXUTILサブプログラムの要約

DBMS_PCLXUTILは、1つのサブプログラム、BUILD_PART_INDEXプロシージャを使用します。

表114-1 DBMS_PCLXUTILパッケージのサブプログラム

サブプログラム 説明

BUILD_PART_INDEXプロシージャ

パーティション単位でローカル索引を作成するためのパーティション内並列性を提供します。

114.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);  

パラメータ

表114-2 BUILD_PART_INDEXプロシージャのパラメータ

パラメータ 説明

jobs_per_batch

パーティション単位のローカル索引同時作成の数。

procs_per_job

各ローカル索引作成で使用されるパラレル実行サーバーの数(1 <= procs_per_job <= max_slaves)。

tab_name

パーティション表の名前(表が存在しない、またはパーティション化されていない場合は例外が発生します)。

idx_name

ローカル索引に指定する名前(ローカル索引が表tab_nameに作成されていない場合は例外が発生します)。

force_opt

TRUEの場合は、すべてのパーティション索引の再作成を強制します。それ以外の場合は、UNUSABLEにマークされたパーティションのみを再作成します。

使用上の注意

このユーティリティは、表の所有者としてのみ実行でき、他のユーザーとしては実行できません。

PROJ001PROJ002の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