既存のメソッドの再コンパイルと再配置 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
ft:locale
ja-JP
ft:lastEdition
2021-03-30
dita:mapPath
ja-JP/jpx1556733107962.ditamap
dita:ditavalPath
ja-JP/jpx1556733107962.ditaval
dita:id
B035-1184
Product Category
Software
Teradata Vantage

COMPILEオプションは、作成場所とは別のプラットフォーム、システム、復元データベースに移動されたメソッドを再コンパイルするためにDBAが使用するオプションです。

COMPILEオプションを指定して、既存のメソッドを再コンパイルします。そのソース コードが存在する場合、システムはそのコードを再コンパイルし、オブジェクトを生成し、.soファイルを再作成して、それをシステムの全ノードに配布します。オブジェクトは、再コンパイルされたバージョンによって置き換えられます。

メソッドがそのオブジェクトだけで作成された場合(つまり再コンパイルするソース コードが存在しない場合)は、.soファイルの再作成とシステムの全ノードへの配布のためにそのメソッド オブジェクトが使用されます。

メソッドが別のプラットフォームから、互換性のないオブジェクトを持つ新しいプラットフォームに復元される場合、COMPILEオプションは失敗します。そうなった場合は、正しいオブジェクトまたはソース コードでメソッドを再作成しなければなりません。

メソッドがパッケージの一部としてインストールされている場合は、このオプションを指定できません。

非保護モードでの実行と、このオプションでの再コンパイルが定義されたメソッドは、ALTER METHODリクエストのフォローアップの一部としてEXECUTE NOT PROTECTEDを指定しない限り、非保護モードで実行する機能を保持しません。非保護モードを指定するべき状況を参照してください。

例えば、addressというUDTのin_state()というメソッドがあり、in_state()はCREATE METHODリクエストによるメソッド作成および完全なデバッグ後に実行されたALTER METHODリクエストにより、EXECUTE NOT PROTECTEDモードで実行するように設定されているとします。CREATE METHODを参照してください。その後、何らかの理由でin_state()を再コンパイルする必要が生じた場合、in_state()の再コンパイルと非保護モードでの実行機能の保持を両立するためには、次の複数ステップを実行する必要があります(同じALTER METHODリクエストでCOMPILE [ONLY]とEXECUTE [NOT] PROTECTEDの両方を指定することはできないからです)。

  1. まず、次のALTER METHODリクエストを実行して、in_state()メソッドを再コンパイルします。
    ALTER METHOD in_state FOR SYSUDTLIB.address COMPILE;
  2. このリクエストが正常に完了すると、システムによりin_state()の保護モードがEXECUTE PROTECTEDにリセットされるので、保護モードをEXECUTE NOT PROTECTEDに戻すには、2回目のALTER METHODリクエストを実行する必要があります。
    ALTER METHOD in_state FOR SYSUDTLIB.address
    EXECUTE NOT PROTECTED;

COMPILE ONLYを指定すると、メソッドが再コンパイルされるだけで、新しいDLLがデータベース ノードに配布されることはありません。

ALTER METHODを使用して保護モードを変更する、あるいはUDTのデータ変換または順序付け機能を実装するメソッドのオブジェクト コードを再コンパイルするに当たって課される制約事項については、UDTのデータ変換および順序付け機能を実装するALTER METHODの制約事項を参照してください。

CREATE ORDERINGおよびREPLACE ORDERINGおよびCREATE TRANSFORMおよびREPLACE TRANSFORMも参照してください。

タイプの異なる別のプラットフォームにメソッドがロードされると、そのメソッドには無効のマークが付けられます。無効なメソッドはすべて再コンパイルが必要です。1つのデータベースに多数のメソッドが存在する場合は、データベース内での最後のコンパイル以外にONLYオプションを指定し、新しいライブラリの生成と配布を省略すれば、時間を節約できます。その場合、そのデータベースで最後に再コンパイルするメソッドにはONLYオプションを指定ないように注意する必要があります。

各データベースのすべてのメソッドで、1つの.soファイルが作成されます。.soファイルは各ノードのシステム ディスク上のデータベース外に保管されます。.soファイルが1つのノードで破損した場合、DBAはCOMPILEオプション付きのALTER METHODリクエストを実行して、.soファイルを再作成できます。

破損した.soファイルの再生成は、そのデータベース内の1つのメソッドをコンパイルするだけで行なえます。.soファイルがシステムで再生成され、そのデータベースで定義されたすべてのユーザー定義メソッドがその.soファイルに組み込まれます。

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