17.00 - 17.05 - 既存の関数の再コンパイルと再配置 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Release Date
2020年6月
Content Type
プログラミング リファレンス
Publication ID
B035-1184-170K-JPN
Language
日本語 (日本)

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リクエストに指定することはできません。

  1. まず、次のALTER FUNCTIONリクエストを実行して、WriteMQ UDFを再コンパイルします。
    ALTER FUNCTION WriteMQ COMPILE;
  2. このリクエストが正常に完了すると、システムにより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ファイルに組み込まれます。

UDT関連のUDFの保護モードを変更すると、システム生成UDTコンストラクタ関数も目に見えない形で再コンパイルされることに注意してください(目に見えないというのは、何らかの理由でコンパイルが失敗しない限り、システムはコンパイル メッセージを返さないという意味です。失敗した場合、システムは該当するエラー メッセージをリクエスト元に返します)。