データベース内の無効なオブジェクトの再コンパイル
データベースをインストール、パッチ適用またはアップグレードした後、再コンパイル・ドライバ・スクリプトを使用して、CDBおよびPDB上の無効なオブジェクトを再コンパイルします。
デフォルトでは、AutoUpgradeによって無効なOracleオブジェクトの再コンパイルが実行されます。これは、構成ファイルのrun_utlrpローカル・パラメータ(デフォルト: prefix.run_utlrp=yes
)によって制御されます。また、Oracleには再コンパイル・スクリプトutlrp.sql
、utlprp.sql
およびutlprpom.sql
が用意されています。これらのスクリプトは、Oracle_home/rdbms/admin
ディレクトリにあります。
ノート:
AutoUpgrade 23.1以降、AutoUpgradeユーティリティを実行すると、AutoUpgradeによってutlprpom.sql
スクリプトが実行され、utlrp.sql
は実行されません。Oracle Database 12cリリース2 (12.2.0.1)以降のリリースへのアップグレードにAutoUpgradeを使用すると、AutoUpgradeはOracle管理スキーマが所有する無効なオブジェクトのみを再コンパイルします。データベースのアップグレードではユーザー・オブジェクトにアクセスする必要がないため、AutoUpgradeは無効なオブジェクトを再コンパイルするときにこのポリシーを維持します。
データベースのインストール後、次の手順ですべての無効なオブジェクトを再コンパイルします。
-
ディレクトリを
Oracle_home/rdbms/admin
に変更します。次に例を示します$ cd $ORACLE_HOME/rdbms/admin
-
Oracleホームの
catcon.pl
スクリプトを使用して、utlrp.sql
を実行します。次に例を示します:$ORACLE_HOME/perl/bin/perl catcon.pl --n 1 --e --b utlrp --d '''.''' utlrp.sql
この使用例では次の点に注意してください。
-
--n
パラメータ: 1に設定されているため、各PDBの再コンパイルは順番に実行されます。 --e
パラメータ: エコーをオンにします。--b
パラメータ: ログ・ファイルのベース名を設定します。utlrp
に設定されています。
PDBのシリアル再コンパイルが完了するまでの時間の遅延を予期してください。アップグレードするPDBの数によっては、再コンパイルは、アップグレード・スクリプトの完了に要する時間を大幅に超えて延長される可能性があります。
utlrp.sql
スクリプトは、無効なオブジェクトの数と使用可能なCPUの数の両方に基づいて、シリアル再コンパイルまたはパラレル再コンパイルで無効なオブジェクトを自動的に再コンパイルします。CPUは、CPUの数(cpu_count)にCPUごとのスレッドの数(parallel_threads_per_cpu)を乗じて計算されます。Oracle Real Application Clusters (Oracle RAC)では、すべてのOracle RACノード全体でこの数が追加されます。 -
データベースにパッチを適用またはアップグレードした後、無効なOracle所有オブジェクトおよびユーザー所有オブジェクトを再コンパイルするには複数のアプローチがあります。
utlrp.sql
またはutlprp.sql
を使用して、すべての無効なオブジェクト(Oracleとユーザー・スキーマの両方で無効なオブジェクト)を再コンパイルします。
時間的な要因があり、無効なオブジェクトのタイプが主にアプリケーション所有のものである場合、Oracle所有の無効なオブジェクトを最初に再コンパイルし、アプリケーション所有の無効なオブジェクトの再コンパイルを後回しにできます。Oracleスキーマで無効なオブジェクトを再コンパイルするには、utlprpom.sql
を使用します。残りの無効なオブジェクトを再コンパイルするには、utlrp.sql
またはutlprp.sql
を使用します。
ノート:
utlprp.sql
またはutlprpom.sql
を使用する場合、どちらのスクリプトでも、スクリプトで使用する並列度を定義するか、使用するパラレル再コンパイル・ジョブの数を決定する必要があることに注意してください。
このスクリプトでは次の構文を使用します。base
はログ・ファイルに指定するベース名、N
は再コンパイル・ジョブをパラレルで実行するPDBの数(並列度)、script.sql
は使用するよう選択したOracle再コンパイル・スクリプト、P
はパラレルで実行するPDBの数です。
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -b base -d $ORACLE_HOME/rdbms/admin
-n N -l /tmp script.sql '--pP'
ログ・ファイルのベース名recomp
を使用してCDBで再コンパイルを実行し、並列度の設定はPDBコンテナごとに3件のジョブとし、使用するよう選択するスクリプトはutlprp.sql
で、一度に最大10個のPDBにわたって再コンパイルするとします。この場合、再コンパイル操作の実行に使用する構文は次のようになります。
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -b recomp -d $ORACLE_HOME/rdbms/admin -n 10 -l /tmp utlprp.sql '--p3'
関連トピック
親トピック: インストール後の推奨作業