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 PROCEDUREがEXECUTE NOT PROTECTEDに指定されているとしたら、作成された関数のエラーによってシステムが破損してしまうでしょう。

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

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

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

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

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

以下の表に外部プロシージャの保護モードの使用法を要約します。

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

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

EXECUTE PROTECTED。

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

プロシージャがCLIv2にリンクされている、またはJavaで記述されている場合 EXECUTE PROTECTED。

CLIv2にリンクされている外部プロシージャは、保護モードでだけ実行できます。

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

外部プロシージャを非保護モードで実行すると、関数の処理速度が大幅に向上します。

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