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

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

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

品質基準に適合しない新規外部ルーチンからシステムを保護するため、すべての外部ルーチンのデフォルトの実行モードは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。

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

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

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

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