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
日本語 (日本)

品質基準に適合しない新規外部ルーチンからシステムを保護するため、すべての外部ルーチンのデフォルトの実行モードはEXECUTE PROTECTEDになっています。デフォルトでCREATE/REPLACE FUNCTIONがEXECUTE NOT PROTECTEDに指定されているとしたら、作成された関数のエラーによってシステムが破損してしまうでしょう。

保護モードは、システムの破損を防ぐために、メモリ アドレス違反、データ構造の破損、不正な計算(ゼロで割る計算など)を捕捉するデータベースの状態です。保護モードは、CPUやメモリ ループまたはオペレーティング システムの入出力(読取り/書込み操作のための外部ファイルのオープンなど)に対して検出も保護もない

この実行モードでは、独自のローカル作業領域内の別個のプロセス(あるいは「プラットフォーム」)として外部ルーチンがアクセスする可能性がある、すべてのデータを隔離します(詳細は、<Teradata Vantage™- SQL外部ルーチン プログラミング、B035-1147>を参照)。何らかのメモリ違反または他のシステム エラーが生じた場合、エラーはルーチンとこれを実行するトランザクションにとどめられ、データベース全体に及ぶことはありません(詳細は、保護実行モードと非保護実行モードを参照)。

この隔離によりルーチンの実行は低速にもなるため、CまたはC++ルーチンが実働環境で使用するための品質基準をすべて満たしたなら、保護モードを非保護に変える必要があります。ルーチンの実行モードを変更するには、単純なALTER FUNCTIONリクエストにEXECUTE NOT PROTECTEDオプションを指定します。

Java UDFと行レベル セキュリティ制約UDFは、どちらも保護モードで実行するSYSUDTLIB。また、非保護モードで実行するように変更することはできません(Java UDFの特別な考慮事項を参照)。

OSシステム呼出しを行なうUDFに対してはこの変更をない。この種のUDFは常に保護モードで実行する必要があります。保護モードを変更した後で、外部ルーチンの再コンパイルや再リンクは不要です。

原則として、DBAはCPU専用の操作を実行する関数に対して(EXECUTE NOT PROTECTEDオプションによって割り当てられる)直接実行モードを指定する前にまず完全にデバッグを実行する必要があります。モードを変更して非保護モードで実行する権限をDBA以外のユーザーに(UDFを作成するソフトウェア技術員にさえ)与えないでください。OSが非保護モードでシステム リソースを消費する原因となる外部ルーチンは実行しないでください。これには、OSによるシステム コンテキストの割振りを引き起こすものすべて、たとえば、オープン ファイル、パイプ、セマフォー、トークン、スレッド(プロセス)などが含まれます。

以下の表にUDF保護モードの使用法を要約します。

条件 指定内容
まだ関数の開発およびデバッグ中の場合 EXECUTE PROTECTED。
関数がJavaで記述されている場合 EXECUTE PROTECTED。

Java関数を変更して非保護モードで実行することができません。

関数がファイルを開く場合、あるいはオペレーティング システムによる追跡を要するオペレーティング システムの別のリソースを使用する場合

これには、OSによるシステム コンテキストの割振りを引き起こすものすべて、たとえば、オープン ファイル、パイプ、セマフォー、トークン、スレッド(プロセス)などが含まれます。

EXECUTE PROTECTED。

そのような関数を非保護モードで実行すると、Teradata Databaseの正しい操作の妨げとなる恐れがあります。

関数が、オペレーティング システムのリソースを何も使用しない計算関数の場合 EXECUTE NOT PROTECTED。

UDFを非保護モードで実行すると、関数の処理速度が大幅に向上します。

このオプションを使用するのは、関数の徹底的なデバッグを済ませて、正しい出力が得られることを確認した後にしてください。