COMPILEオプションは、作成場所とは別のプラットフォーム、システム、復元データベースに移動された関数を再コンパイルするためにDBAが使用するオプションです。
COMPILEオプションを指定して、既存の関数を再コンパイルします。ソース コードが存在する場合、システムはそのコードを再コンパイルし、オブジェクトを生成し、CまたはC++で記述された関数用の.soファイルを再作成します。そして、その.soファイルをシステムの全ノードに配布します。プロシージャがJavaで記述されている場合、COMPILEオプションは既存の関数を再コンパイルし、オブジェクトを生成して、関連するJARファイルをシステムの全ノードに配布します。オブジェクトは、再コンパイルされたバージョンによって置き換えられます。
関数がそのオブジェクトだけで作成された場合(つまり再コンパイルするソース コードが存在しない場合)は、.soファイルの再作成とシステムの全ノードへの配布のためにその関数オブジェクトが使用されます。
関数が別のプラットフォームから、互換性のないオブジェクトを持つ新しいプラットフォームに復元される場合、COMPILEオプションは失敗します。そうなった場合は、正しいオブジェクトまたはソース コードで関数を再作成しなければなりません。
関数がパッケージの一部としてインストールされている場合は、このオプションを指定できません。
非保護モードでの実行と、このオプションでの再コンパイルが定義された関数は、ALTER FUNCTIONリクエストのフォローアップの一部としてEXECUTE NOT PROTECTEDを指定しない限り、非保護モードで実行する機能を保持しません。非保護モードを指定するべき状況を参照してください。
例えば、CREATE FUNCTIONリクエストにより作成された関数があり、それが十分にデバッグされた後で実行されたALTER FUNCTIONリクエストにより、EXECUTE NOT PROTECTEDモードで実行するように設定されたWriteMQという名前のUDFがあるとします。CREATE FUNCTIONおよびREPLACE FUNCTION(外部形式)を参照してください。何らかの理由により、WriteMQを再コンパイルする必要が後で生じるため、WriteMQを再コンパイルして、非保護モードで実行するためにその機能を保持する必要がある場合は、以下の複数ステップのプロシージャを実行する必要があります。COMPILE [ONLY]とEXECUTE [NOT] PROTECTEDの両方を同じALTER FUNCTIONリクエストに指定することはできません。
- まず、次のALTER FUNCTIONリクエストを実行して、WriteMQ UDFを再コンパイルします。
ALTER FUNCTION WriteMQ COMPILE;
- このリクエストが正常に完了すると、システムによりWriteMQの保護モードがEXECUTE PROTECTEDにリセットされるので、保護モードをEXECUTE NOT PROTECTEDに戻すには、2回目のALTER FUNCTIONリクエストを実行する必要があります。
ALTER FUNCTION WriteMQ EXECUTE NOT PROTECTED;
COMPILE ONLYを指定すると、UDFが再コンパイルされるだけで、新しいDLLがデータベース ノードに配布されることはありません。COMPILE ONLYオプションはJava関数には使用できません。
異なるタイプの別のプラットフォームにUDFをロードすると、そのUDFは無効になります。無効なUDFはすべて再コンパイルが必要です。1つのデータベースに多数のUDFが存在する場合は、データベース内での最後のコンパイル以外にONLYオプションを指定し、新しいライブラリの生成と配布を省略すれば、時間を節約できます。その場合、そのデータベースで最後に再コンパイルするUDFにはONLYオプションを指定しないように注意する必要があります。
ノードのデータベースの各アプリケーション カテゴリごとに、すべてのCまたはC++ UDFで、1つの.soファイルが作成されます。.soファイルは各ノードのシステム ディスク上のデータベース外に保管されます。.soファイルが1つのノードで破損した場合、COMPILEオプション付きのALTER FUNCTIONリクエストを実行して、.soファイルを再作成できます。
破損した.soファイルの再生成は、そのデータベース内の1つの関数をコンパイルするだけで行なえます。.soファイルがシステムで再生成され、そのデータベースで定義されたすべてのユーザー定義関数がその.soファイルに組み込まれます。