バージョン 8.1.3
 —  トリガとストアドプロシージャ  —

はじめに

Adabas トリガとストアドプロシージャ機能は、トリガやストアドプロシージャを定義、処理、および監視するときに使用します。

このドキュメントでは、両方のタイプのプロシージャおよびそれらの特性について説明します。 この機能のコンポーネントについて紹介し、オンラインサービスやバックグラウンド処理を提供するためにコンポーネントを組み合わせて使用する方法について説明します。

このドキュメントでは、次のトピックについて説明します。


プロシージャ

プロシージャは、Natural の標準機能を使用して記述され、テストされた Natural サブプログラムです。 トリガとストアドプロシージャの主な違いは、その実行方法にあります。

トリガであるか、ストアドプロシージャであるかにかかわらず、同じパラメータがサブプログラムに渡されます。

ストアドプロシージャ

ストアドプロシージャはユーザーアプリケーションから呼び出されて、特殊なコールをプロシージャに発行します。1 つ以上のパラメータをプロシージャに渡すこともあります。 プロシージャは、Adabas によって実行されます。

プロシージャはデータベース(サーバー)にロードされる Natural システムファイル(Adabas ファイル)に格納されるため、サーバーとの間に発生するデータトラフィックの量が減少します。

ストアドプロシージャのサブプログラムがサンプルとして用意されています。ストアドプロシージャのフロントエンドで定義済みのコール構造は修正できます。

次の図は、ストアドプロシージャの使用法を示しています。 STPLNK は、 ストアドプロシージャ要求の呼び出しに使用されるストアドプロシージャのリンクルーチンです。 STPRBE は、 プロシージャから呼び出されるレコードバッファ抽出ルーチンのことで、コール元のルーチンから渡されるパラメータの取得に使用されます。

graphics/stored_proc_usage.png

STPLNK の詳細は、「ストアドプロシージャのリンクルーチン(STPLNKnn)」を参照してください。 STPRBE のプログラミングに関する情報は、「レコードバッファ抽出ルーチン(STPRBE)」を参照してください。

トリガ

トリガは、トリガするイベントと、トリガされるプロシージャの 2 つの部分から成ります。

トリガするイベントは、Adabas ファイル番号、オプションのコマンドまたはフィールド名(あるいはそれら両方)など一連の選択条件で定義されます。 条件が満たされると、イベントが発生し、それに応じてトリガされるプロシージャが実行されます。 例えば、EMPLOYEES ファイルの SALARY フィールドに対する更新コマンドによって、トリガが起動します。

注意:
トリガを別のトリガで起動させることはできません。

トリガの実行は、開始 Adabas コマンドが Adabas ニュークリアスによって実行される前にするか後にするかを定義できます。 トリガの動作は、トリガと Adabas コマンドが同期しているかどうか、同期しているならばトリガがコマンドのトランザクションロジックに関与しているかどうかによって一部変化します。

トリガには、主な特性が 3 つあります。

プレコマンドまたはポストコマンド

プレコマンド(または "プレ")トリガは、Adabas ニュークリアスによる開始 Adabas コマンドの処理前に実行されます。 Adabas コマンドの実行前にチェックが行われ、トリガを起動すべきかどうかが確認されます。

例えば、指定されたファイルに対して N1 コマンドが発行されるたびにトリガが起動するように定義されている場合、N1 は開始 Adabas コマンドです。 N1 の実行前に行われるチェックで、プレコマンドトリガを起動するかどうかが決定されます。 トリガされたプロシージャが正常に実行された後で、N1 が処理されます。

ポストコマンド(または "ポスト")トリガは、Adabas ニュークリアスによる開始 Adabas コマンドの処理後に実行されます。 トリガされたプロシージャは、Adabas ニュークリアスからのコマンドのリターンコードがゼロの場合にのみ実行されます。 リターンコードがゼロ以外の場合は、トリガがあるかどうかはチェックされず、処理は通常どおりに継続します。 正常に実行されたコマンドについては、コマンドの処理の完了前に、トリガがあるかどうかがチェックされます。

例えば、指定されたファイルに対して L3 コマンドが発行されるたびにトリガが起動するように定義されている場合、L3 は開始 Adabas コマンドです。 ゼロのリターンコードが返された後に行われるチェックで、ポストコマンドトリガを起動するかどうかが決定されます。 コマンドが正常に実行されてからユーザーに通知される前に、トリガされたプロシージャが実行されます。

非同期または同期

非同期トリガは、Adabas コマンドの開始とは無関係に実行されます。 ユーザーに対する Adabas コマンドの処理は、トリガされたプロシージャが別の処理として実行される間に、中断されずに続行されます。 トリガされたプロシージャが実行されるのは、開始するコマンドからの応答を受信した後です。

トリガ条件を満たすコマンドが発行されると、トリガが起動され、Adabas コマンドの処理が再開されます。 Adabas コマンドとトリガされるプロシージャが、お互いに直接影響し合いません。

非同期トリガは、プロシージャと実際の Adabas コマンドの間に依存関係がないときに使用されます。

同期トリガでは、該当ユーザーの Adabas コマンド処理が中断されます。 開始 Adabas コマンドは、トリガされたプロシージャの実行が完了するまで中断されます。 プロシージャの結果が Adabas コマンドに影響する可能性があります。

ポストコマンドトリガの場合、トリガされるプロシージャの前に Adabas コマンドが実行された後中断します。コマンドの結果は、トリガされたプロシージャの実行が完了するまでユーザーに返されません。

関与または非関与

同期トリガは、開始 Adabas コマンドのロジックに関与する場合も関与しない場合もあります。

関与トリガが起動すると、関与トリガを起動した Adabas コマンドと同じユーザー(コミュニケーション)ID が割り当てられているプロシージャが実行されます。したがって、このトリガはトランザクションのロジックに全面的に関与することになります。

非関与トリガのユーザー ID は、開始コマンドを識別する Adabas ユーザーキューエレメント(UQE)のユーザー(コミュニケーション)ID とは異なります。したがって、このトリガは、開始コマンドのトランザクションロジックには関与しません。

Top of page

コンポーネント

Adabas では、トリガとストアドプロシージャを実装および処理するために、3 つの主要なコンポーネントを使用します。

Adabas トリガドライバ

Adabas トリガドライバは、Adabas ニュークリアスの一部として実行され、一般にトリガの実行時処理全体を制御します。 トリガを起動するかどうか、Natural トリガドライバを開始するかどうか、および相互に作用するかどうかを判断して、プロシージャが正確に適切な時間の範囲で処理するようにします。 プロシージャの処理方法の詳細は、「処理とパフォーマンス」を参照してください。

初期化

Adabas ニュークリアスは、起動時に ADARUN パラメータ SPT=YES が指定されているかどうかを判断します。指定されている場合は、制御が Adabas トリガドライバに渡され、Adabas トリガドライバを初期化できるようになります。 初期化時に、Adabas トリガドライバは次の処理を行います。

Natural サブシステムの開始

Adabas トリガドライバが開始されると、プロシージャを実際に実行する Natural サブシステムが開始されます。

Natural サブシステムは、ユーザー作成のプロシージャを実行します。 Adabas トリガプロファイルの最大サブシステムパラメータでは、 開始する Natural サブシステムの数(1~10)を指定します。

各 Natural サブシステムは、通常、Adabas アドレススペース内のサブタスクとして実行するように最低限修正されたバッチ Natural ニュークリアスです。 これは、MPM 起動 JCL/JCS で指定されるリージョンサイズに影響します。 この影響は分割された Natural ニュークリアスを使用することで、最小化することができます。

Natural サブシステムが開始されると、Adabas トリガドライバは、サブシステムのステータスやアクティビティの変化を記録します。 ユーザーは、トリガメンテナンスのサブシステムアクティビティ機能を使用して、これらのアクティビティを監視できます。

Natural サブシステムがアクティブになると、次の処理が行われます。

トリガの確認

Adabas トリガドライバは、ニュークリアスが受け取るコマンドごとに、トリガを起動する必要があるかどうかを決定します。

プレコマンドトリガの場合、Adabas トリガドライバは Adabas スレッドで処理されるコマンドが選択される前にトリガをチェックします。 Adabas でコマンドが正常に処理されレスポンスコードがゼロになると、Adabas トリガドライバは起動するポストコマンドトリガがあるかどうか調べます。 1 つのコマンドに対して起動できるのは、結果に関係なく 2 つのトリガ(1 つのプレコマンドトリガと 1 つのポストコマンドトリガ)のみです。

コマンドの結果がトリガの起動である場合、またはコマンドがストアドプロシージャ要求であると Adabas トリガドライバが判断した場合、次の場所でエントリが作成されます。

エントリには、コマンドと、トリガテーブル内の対応するエントリの両方から取得した情報が含まれます。

Natural サブシステムが処理を待機中の場合、 直ちにトリガ要求が渡されます。 それ以外の場合、次のサブシステムが使用可能になるまで、トリガ要求はプレトリガキューまたはポストトリガキュー内に残ります。 サブシステムがトリガ要求を受け入れると、 Natural トリガドライバの制御下で処理が続行されます(「コンポーネント」を参照)。

プロシージャの処理結果

プロシージャの実行が完了すると、Natural トリガドライバは、その結果を "トリガ要求エントリ" に格納し、ステータスが適切に更新されます。 Adabas トリガドライバは、この処理を検出すると、トリガ処理を完了しようとします。

プレコマンドトリガとポストコマンドトリガのどちらでも、プロシージャからのリターンコードによって、結果の処理方法が決定されます。 詳細については、「結果の処理」を参照してください。

シャットダウン

Adabas トリガドライバは、 失敗した Natural サブシステムのすべてを記録します。 すべてのサブシステムが失敗すると、Adabas トリガドライバは、プロシージャをこれ以上処理することができないと判断し、Adabas トリガプロファイルのエラーアクション値に従って終了します。 ニュークリアスクラスタ環境では、 クラスタ内の他の全ニュークリアスにエラーアクション Ignore または Reject が渡されます。

Adabas ニュークリアスが ADAEND または HALT オペレータコマンドを受け取り、Adabas トリガドライバにシャットダウンを指示した場合は、Adabas トリガドライバも終了します。

Natural トリガドライバ

Natural トリガドライバは、Natural サブシステムの起動時に初期化されます。 Natural トリガドライバは、トリガされたプロシージャとストアドプロシージャのすべてを実行します。次のコンポーネントがあります。

STP Natural サブシステムの起動時に呼び出されます。 STP は、グローバルデータエリア STPGDA を初期化し、Natural セッションに必要なすべての設定を確立します。 主な機能は、あらゆるエラーからのリカバリを処理すること、および再スタートを確実に完了させることです。
STPPDRIV Natural トリガドライバのメインルーチンとして機能し、プロシージャの呼び出しを行います。 STPPDRIV は STPNAT を呼び出します。
STPNAT Adabas トリガドライバとのあらゆる通信と、サブシステムに対するトリガ要求の提供を行います。 Adabas トリガドライバに対して、処理の準備が整ったことを通知します。
SPAENA (BS2000 のみ)データベースコマンドキューのアドレスを取得します。

パラメータリストの設定

トリガ要求が Natural サブシステムによって受け入れられると、STPPDRIV は、起動されたトリガによって指定されたパラメータリストに応じて、プロシージャに渡すパラメータリストを設定します。

記録ルーチンの呼び出し STPUTRAK

Adabas トリガプロファイルでトリガアクティビティの記録設定がアクティブな場合、ルーチン STPUTRAK が呼び出されます。

STPUTRAK は、ユーザー定義のルーチンで、プロシージャを呼び出す各要求を記録します。この記録は、プロシージャを呼び出す前と後の両方で行われます。 このルーチンを使用して、トレースメッセージの書き込みと、各サブシステムのトリガ処理の監査を行うことができます。 デフォルトの STPUTRAK ルーチンが用意されています。

プロシージャのパラメータと同類で、トリガに関する情報を含むパラメータが、ワークエリアとして使用可能な 250 バイト領域とともに STPUTRAK ルーチンに渡されます。 STPUTRAK は、このワークエリアを使用して、セッション全体の情報を保持します。ワークエリアは Natural トリガドライバによって変更されることはありません。 STPUTRAK には、ワークエリアをプロシージャに渡すことができるオプションが用意されています。

プロシージャの処理

STPUTRAK が処理されて制御が STPPDRIV に戻ると、トリガされたプロシージャが CALLNAT を使用して呼び出されます。

プロシージャが処理を完了すると、STPPDRIV は結果の STPNAT を通知する前に、Adabas トリガプロファイルで "トリガアクティビティの記録" オプション がアクティブに設定されているかどうかを再度確認します。 アクティビティの記録がアクティブな場合、プロシージャの結果を監査できるように STPUTRAK が呼び出されます。

エラーからのリカバリ

プロシージャが NAT0954、NAT3009、NAT1305 などのエラーになると、プロシージャは正常に終了しません。 代わりに Natural トリガドライバはエラーリカバリを実行します。

トリガアクティビティの記録設定に関係なく、エラーの情報は STPUTRAK に渡されます。 この情報は、データベース管理者(DBA)がデバッグや問題分析に使用できます。 そのため、STPUTRAK は Natural トリガドライバによって常に実行可能でなければなりません。 この情報を取得するためにトレースをアクティブ化することをお勧めします。

トリガ要求エントリの更新

プロシージャの結果が STPNAT に渡されると、トリガ要求が更新され、そのステータスは "完了" に変化します。 Adabas トリガドライバは、更新されたエントリを検出するとトリガ処理を完了します。

STPNAT は別のトリガ要求が作成されるのを待機し、サイクル全体が再び開始します。

トリガメンテナンス

トリガメンテナンスは、 トリガ定義の作成とシステム処理の監視を対話的に実行する機能で、フルバージョンの Adabas Online System が必要です。 詳細は、このドキュメントの「トリガメンテナンス」を参照してください。

trigger definitionは、実行対象のプロシージャの名前と属性、および triggering eventを起動する選択条件(Adabas コマンドタイプ、ファイルの名前または番号、およびフィールド名)で構成されます。

トリガメンテナンスでは、ニュークリアスによるあらゆるトリガ処理の実行を監視および制御する機能も提供します。 Adabas トリガドライバと Natural トリガドライバの両方のアクティビティを調べて、次の処理を実行できます。

Top of page

処理のまとめ

ストアドプロシージャの処理

ストアドプロシージャ処理のステップについて、次の図に示し、「処理ステップ」で説明します。

graphics/stored_proc.png

Start of instruction set 処理ステップ

  1. ユーザーアプリケーションは、必要なパラメータを設定し、ストアドプロシージャのリンクルーチン STPLNKnn に対して CALL を発行します。

  2. STPLNKnn は、ユーザーの要求を解釈し、標準の Adabas API の形式で DBMS に対する呼び出しを発行します(直接呼び出し)。

  3. Adabas トリガドライバはストアドプロシージャ要求を受け取り、Natural トリガドライバに渡します。

  4. 指定された Natural サブプログラム(ストアドプロシージャ)が呼び出されます。

  5. 必要に応じて、呼び出し元のパラメータが、レコードバッファ抽出ルーチンによってサブプログラムで利用できるようになります。 オプション設定で許可されている場合は、パラメータを修正できます。

  6. 完了すると、Natural サブプログラムは制御を Natural トリガドライバに返します。

  7. Natural トリガドライバは、ストアドプロシージャ要求の結果を Adabas トリガドライバに返します。

  8. ユーザーに、通知と修正されたパラメータが返されます。

トリガ処理

トリガ処理のステップについて、次の図に示し、「処理ステップ」で説明します。

graphics/trigger_proc.png

Start of instruction set 処理ステップ

  1. Adabas トリガドライバは、すべての Adabas コマンドを受け取り、それらのコマンドがトリガイベントに該当するか確認します。

  2. コマンドがトリガ条件を満たすと、Adabas トリガドライバはトリガ要求と処理間情報をトリガテーブルに格納します。

  3. Natural トリガドライバ制御ルーチン STPPDRIV で別のトリガ要求を処理する準備が整うと、STPPDRIV は STPNAT を呼び出します。

  4. STPNAT は、トリガテーブルから次のトリガ要求を取得し、STPPDRIV に渡します。

  5. STPPDRIV は、トリガ要求タイプを判断し、CALLNAT をトリガ定義で指定された Natural サブプログラムに対して発行し、関連するパラメータを渡します。

  6. STPNAT は、トリガテーブル内のトリガエントリを更新し、トリガが完了したことを示します。

Top of page