286 UTL_RECOMP
UTL_RECOMPパッケージは、データベースに含まれている無効なPL/SQLモジュール、無効なビュー、Javaクラス、索引タイプおよび演算子を、順次またはパラレルに再コンパイルします。
この章のトピックは、次のとおりです:
286.1 UTL_RECOMPの概要
通常、メジャー・アップグレードの後はPL/SQLおよびJavaオブジェクトがすべて無効化されているため、そのタイミングでこのスクリプトを実行すると特に効果的です。無効になったオブジェクトを使用するときは自動的に再コンパイルされますが、操作前にあらかじめこのスクリプトを実行しておくと、ランタイム時にオンデマンドによる自動再コンパイルが実行されても待機時間を解消または短縮できるので便利です。
パラレルな再コンパイルでは複数のCPUを活用できるので、無効なオブジェクトの再コンパイル時間が削減されます。並列度は、RECOMP_PARALLELプロシージャに対する最初の引数で指定します。
通常の初期設定としては、使用可能なCPU 1台につき1スレッドの並列設定にしておけば十分です。ただし、無効化されたオブジェクトを再コンパイルすると、システム表に大量のデータが書き込まれ、I/Oがきわめて集中的に行われるので注意してください。ディスク・システムの速度が遅い場合は、それが重大なボトルネックとなって、並列度に大きい値を設定しても高速化されない可能性があります。
286.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をデータベースで実行しないでください。この推奨事項に従わないとデッドロックになる可能性があります。
286.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');
286.4 UTL_RECOMPサブプログラムの要約
この表は、UTL_RECOMP
サブプログラムを示し、簡単に説明しています。
表286-1 UTL_RECOMPパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
指定されたスキーマの無効なオブジェクト、またはデータベース内のすべての無効なオブジェクトをパラレルに再コンパイルします。 |
|
指定されたスキーマの無効なオブジェクト、またはデータベース内のすべての無効なオブジェクトを再コンパイルします。 |
286.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);
パラメータ
表286-2 RECOMP_PARALLELプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
再コンパイルをパラレル実行するスレッド数。 |
|
無効なオブジェクトを再コンパイルするためのスキーマ。 |
|
内部テストや診断テストを行う場合にのみ値を設定します。 |
使用上のノート
UTL_RECOMP_COMPILED
表は、RECOMP_PARALLEL
でコンパイルが試みられたオブジェクト、またはこれまでにコンパイルされたオブジェクトで更新されます。再コンパイルの進行状況をモニターしている場合には、オブジェクトの数は時間とともに増えていきます。これらの表は、オブジェクトが複数回コンパイルされないようにするために、RECOMP_PARALLEL
によって内部的に使用されます。
表286-3 UTL_RECOMP.RECOMP_PARALLELによって生成される表
表 | 用途 |
---|---|
|
依存関係に基づいてグループに分けられているオブジェクトの表。これは、パラレルな再コンパイルをガイドするために、 |
|
|
|
オブジェクト番号を主キーとして使用する、 |
|
|
表286-4 UTL_RECOMP.RECOMP_PARALLELによって生成されるビュー
ビュー | 用途 |
---|---|
|
コンパイル可能なすべてのオブジェクトを含むビュー。 |
|
コンパイルされておらずスキップ・リストにない無効なオブジェクトを |
|
順番にコンパイルする必要があるオブジェクトを |
|
パラレルにコンパイルできるオブジェクトを |
|
無効な |
|
循環依存チェーンがあるマテリアライズド・ビュー・オブジェクトを |
|
無効だが循環依存チェーンがないマテリアライズド・ビュー・オブジェクトを |
|
コンパイルされておらずスキップ・リストにないすべてのスタブ・オブジェクトを含むビュー。このビューを |
286.4.2 RECOMP_SERIALプロシージャ
このプロシージャは、指定されたスキーマの無効なオブジェクト、またはデータベース内のすべての無効なオブジェクトを再コンパイルします。
構文
UTL_RECOMP.RECOMP_SERIAL( schema IN VARCHAR2 DEFAULT NULL, flags IN PLS_INTEGER DEFAULT 0);
パラメータ
表286-5 RECOMP_SERIALプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
無効なオブジェクトを再コンパイルするためのスキーマ。 |
|
内部テストや診断テストを行う場合にのみ値を設定します。 |