276 UTL_RECOMP

UTL_RECOMPパッケージは、データベースに含まれている無効なPL/SQLモジュール、無効なビュー、Javaクラス、索引タイプおよび演算子を、順次またはパラレルに再コンパイルします。

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

276.1 UTL_RECOMPの概要

通常、メジャー・アップグレードの後はPL/SQLおよびJavaオブジェクトがすべて無効化されているため、そのタイミングでこのスクリプトを実行すると特に効果的です。無効になったオブジェクトを使用するときは自動的に再コンパイルされますが、操作前にあらかじめこのスクリプトを実行しておくと、ランタイム時にオンデマンドによる自動再コンパイルが実行されても待機時間を解消または短縮できるので便利です。

パラレルな再コンパイルでは複数のCPUを活用できるので、無効なオブジェクトの再コンパイル時間が削減されます。並列度は、RECOMP_PARALLELプロシージャに対する最初の引数で指定します。

通常の初期設定としては、使用可能なCPU 1台につき1スレッドの並列設定にしておけば十分です。ただし、無効化されたオブジェクトを再コンパイルすると、システム表に大量のデータが書き込まれ、I/Oがきわめて集中的に行われるので注意してください。ディスク・システムの速度が遅い場合は、それが重大なボトルネックとなって、並列度に大きい値を設定しても高速化されない可能性があります。

276.2 UTL_RECOMPの操作上のノート

UTL_RECOMPには、操作上のノートがいくつかあります。

  • このパッケージは、ジョブ・キューを使用して再コンパイルをパラレルに行います。

  • このパッケージは、SQL*PLUSを使用して実行してください。

  • このスクリプトを実行するには、AS SYSDBAと接続している必要があります。

  • このパッケージでは、次のパッケージがVALIDステータスで作成されていることが前提です。

    • STANDARD (standard.sql)

    • DBMS_STANDARD (dbmsstdx.sql)

    • DBMS_JOB (dbmsjob.sql)

    • DBMS_RANDOM (dbmsrand.sql)

  • このパッケージでエントリを実行している間は、他のDDLをデータベースで実行しないでください。この推奨事項に従わないとデッドロックになる可能性があります。

276.3 UTL_RECOMPの例

次の例は、UTL_RECOMPがオブジェクトを再コンパイルする様々な方法を示しています。

  • すべてのオブジェクトを順次再コンパイルする場合:

    EXECUTE UTL_RECOMP.RECOMP_SERIAL();
    
  • スキーマSCOTTのオブジェクトを順次再コンパイルする場合:

    EXECUTE UTL_RECOMP.RECOMP_SERIAL('SCOTT');
    
  • 4つのスレッドをパラレルで使用し、すべてのオブジェクトを再コンパイルする場合:

    EXECUTE UTL_RECOMP.RECOMP_PARALLEL(4);
    
  • JOB_QUEUE_PROCESSESパラメータに指定されたスレッド数を使用し、スキーマJOEのオブジェクトを再コンパイルする場合:

    EXECUTE UTL_RECOMP.RECOMP_PARALLEL(NULL, 'JOE');

276.4 UTL_RECOMPサブプログラムの要約

この表は、UTL_RECOMPサブプログラムを示し、簡単に説明しています。

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

サブプログラム 説明

RECOMP_PARALLELプロシージャ

指定されたスキーマの無効なオブジェクト、またはデータベース内のすべての無効なオブジェクトをパラレルに再コンパイルします。

RECOMP_SERIALプロシージャ

指定されたスキーマの無効なオブジェクト、またはデータベース内のすべての無効なオブジェクトを再コンパイルします。

276.4.1 RECOMP_PARALLELプロシージャ

このプロシージャはDBA_Dependenciesビューに表示された情報を使用して、データベース内または指定されたスキーマ内の無効なオブジェクトをパラレルに再コンパイルします。

構文

UTL_RECOMP.RECOMP_PARALLEL(
   threads  IN   PLS_INTEGER DEFAULT NULL,
   schema   IN   VARCHAR2    DEFAULT NULL,
   flags    IN   PLS_INTEGER DEFAULT 0);

パラメータ

表276-2 RECOMP_PARALLELプロシージャのパラメータ

パラメータ 説明

threads

再コンパイルをパラレル実行するスレッド数。NULLの場合は、'job_queue_processes'の値が使用されます。

schema

無効なオブジェクトを再コンパイルするためのスキーマ。NULLの場合は、データベース内のすべての無効なオブジェクトが再コンパイルされます。

flags

内部テストや診断テストを行う場合にのみ値を設定します。

使用上のノート

UTL_RECOMP_COMPILED表は、RECOMP_PARALLELでコンパイルが試みられたオブジェクト、またはこれまでにコンパイルされたオブジェクトで更新されます。再コンパイルの進行状況をモニターしている場合には、オブジェクトの数は時間とともに増えていきます。これらの表は、オブジェクトが複数回コンパイルされないようにするために、RECOMP_PARALLELによって内部的に使用されます。

表276-3 UTL_RECOMP.RECOMP_PARALLELによって生成される表

用途

UTL_RECOMP_ERRORS

依存関係に基づいてグループに分けられているオブジェクトの表。これは、パラレルな再コンパイルをガイドするために、RECOMP_PARALLELによって内部的に使用されます。

UTL_RECOMP_COMPILED

RECOMP_PARALLELでコンパイルが試みられたオブジェクトの表。これは、オブジェクトが複数回コンパイルされないようにするために、recomp_parallelによって内部的に使用されます。

UTL_RECOMP_COMP_IDX1

オブジェクト番号を主キーとして使用する、UTL_RECOMP_COMPILEDに対して作成される索引。

UTL_RECOMP_SKIP_LIST

RECOMP_PARALLELでコンパイルが試みられないオブジェクトの表。以前に識別された無効なオブジェクトがこの表に入力されるように、更新の開始前にRECOMP_PARALLELUTL_RECOMP.POPULATE_UTL_RECOMP_SKIP_LISTをコールするというのが、一般的な使用方法です。後で、アップグレード後にRECOMP_PARALLELが実行されたときは、以前に識別された無効なオブジェクトのコンパイルは試みられません。

表276-4 UTL_RECOMP.RECOMP_PARALLELによって生成されるビュー

ビュー 用途

UTL_RECOMP_ALL_OBJECTS

コンパイル可能なすべてのオブジェクトを含むビュー。

UTL_RECOMP_INVALID_ALL

コンパイルされておらずスキップ・リストにない無効なオブジェクトをUTL_RECOMP_ALL_OBJECTSから選択したビュー。

UTL_RECOMP_INVALID_SEQ

順番にコンパイルする必要があるオブジェクトをUTL_RECOMP_INVALID_ALLから選択したビュー。

UTL_RECOMP_INVALID_PARALLEL

パラレルにコンパイルできるオブジェクトをUTL_RECOMP_INVALID_ALLから選択したビュー。

UTL_RECOMP_INVALID_JAVA_SYN

無効なJAVAシノニムであるオブジェクトをUTL_RECOMP_ALL_OBJECTSから選択したビュー。

UTL_RECOMP_CIRCULAR_MV

循環依存チェーンがあるマテリアライズド・ビュー・オブジェクトをUTL_RECOMP_ALL_OBJECTSから選択したビュー。

UTL_RECOMP_INVALID_MV

無効だが循環依存チェーンがないマテリアライズド・ビュー・オブジェクトをUTL_RECOMP_ALL_OBJECTSから選択したビュー。

UTL_RECOMP_ALL_STUBS

コンパイルされておらずスキップ・リストにないすべてのスタブ・オブジェクトを含むビュー。このビューをRECOMP_PARALLELで使用する場合、これは、現行エディションのスタブのみを表示するように制限されます。

276.4.2 RECOMP_SERIALプロシージャ

このプロシージャは、指定されたスキーマの無効なオブジェクト、またはデータベース内のすべての無効なオブジェクトを再コンパイルします。

構文

UTL_RECOMP.RECOMP_SERIAL(
   schema   IN   VARCHAR2    DEFAULT NULL,
   flags    IN   PLS_INTEGER DEFAULT 0);

パラメータ

表276-5 RECOMP_SERIALプロシージャのパラメータ

パラメータ 説明

schema

無効なオブジェクトを再コンパイルするためのスキーマ。NULLの場合は、データベース内のすべての無効なオブジェクトが再コンパイルされます。

flags

内部テストや診断テストを行う場合にのみ値を設定します。