まだ品質基準に適合していない新規外部ルーチンからシステムを保護するため、すべての外部ルーチンのデフォルトの実行モードは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。 外部プロシージャを非保護モードで実行すると、関数の処理速度が大幅に向上します。 このオプションを使用するのは、プロシージャの徹底的なデバッグを済ませて、正しい出力が得られることを確認した後にしてください。 |