17.10 - 非保護モードを指定するべき状況 - Advanced SQL Engine - Teradata Database

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

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

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

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

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

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

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

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

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

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

条件 指定内容
まだメソッドの開発およびデバッグ中の場合 EXECUTE PROTECTED。
メソッドがファイルを開く場合、あるいはオペレーティング システムによる追跡を要するオペレーティング システムの別のリソースを使用する場合

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

EXECUTE PROTECTED。

そのようなメソッドを非保護モードで実行すると、データベースの正しい操作の妨げとなる恐れがあります。

メソッドがオペレーティング システムのリソースを何も使用しない場合 EXECUTE NOT PROTECTED。

メソッドを非保護モードで実行すると、処理速度が大幅に向上します。

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