IMS プログラムの異常終了時の処置

プログラムが異常終了した場合、次の処置を実行すると、問題の検出および修正の作業を単純化することができます。

  • 異常終了したプログラム下の状況について、できるだけたくさんの情報 を記録してください。
  • 確かな初期設定および実行エラーについて検査してください。

IMS プログラムの異常終了後の推奨処置

多くの場所に、プログラムが異常終了した場合の処置に関するガイドラインがあります。 ここでは、共通のガイドラインを提案します。

  • エラー状態を文書化して、調査および訂正に役立ててください。 次の情報が役立つことがあります。
    • プログラムの PSB 名
    • プログラムが処理していたトランザクション・コード (オンライン・プロ グラムのみ)
    • 処理されていた入力メッセージのテキスト (オンライン・プログラムのみ)
    • 呼び出し機能
    • 起点論理端末名 (オンライン・プログラムのみ)
    • 実行されていた呼び出しで参照されていた PCB の内容
    • 問題が発生した際の入出力域の内容
    • データベース呼び出しが実行されていた際に呼び出しが使用し ていた SSA
    • 日時
  • プログラムでエラーが発生した場合、すべての必要なエラー情報を標準 エラー・ルーチンに渡すことができます。 プログラムで STAE ルーチンまたは ESTAE ルーチンを使用しないでください。 IMS™ は STAE ルーチンまたは ESTAE ルーチンを使用して、 アプリケーション・プログラムのあらゆる異常終了を制御領域に通知します。 独自の STAE ルーチンまたは ESTAE ルーチンを呼び出す場合、 異常終了が起こると IMS が制御を失う可能性があります。
  • オンライン・プログラムは、メッセージを発信元論理端末に送信して、 エラーが発生していることを、端末装置で作業している人に通知することができます。 CCTL を使用していない場合、プログラムは I/O PCB から論理端末名を得て、 高速 PCB に記憶するとともに、1 つあるいは複数の ISRT 呼び出しを 出して、メッセージを送信することができます。
  • さらに、オンライン・プログラムは、プログラムの終了についての情報を知らせる メッセージをマスター端末オペレーターに送信することができます。 このためには、プログラムはマスター端末の論理端末名を高速 PCB に記憶し、 1 つあるいは複数の ISRT 呼び出しを出します。 (CCTL を使用している場合は、これは適用されません。)
  • さらに、メッセージをプリンターに送信して、エラー・レコードのハードコピーを得ることができます。
  • LOG 要求を出してシステム・ログにメッセージを送信でき ます。
  • 場所によっては、一日の終わりに BMP を実行して、 その日発生したすべてのエラーをリストするところもあります。 お客様のショップでこれを行う場合、その BMP 用に設定された宛先をもつ高速 PCB を使用して、メッセージを送信できます。 (CCTL を使用している場合は、これは適用されません。)

IMS プログラムの異常終了の診断

テストしているプログラムおよび実行しているプログラムが正しく稼働しない場合、 問題を分離する必要があります。 問題はプログラミング・エラー (例えば、要求したうちの一つをコーディングした方法のエラー) から、システム問題までのものである可能性があります。このトピックでは、アプリケーション・プログラマーを対象に、プログラムが実行に失敗する、異常終了する、または誤った結果を生成するという場合に取ることができる手順についてのいくつかのガイドラインを示しています。

IMS プログラムの初期設定エラー

プログラムが制御を受け取る前に、IMS は、 アプリケーション・プログラムが使用している PSB および DBD を正しくロードし、 初期設定しなければなりません。 この領域に問題があると、システム・プログラマーまたは DBA (あるいは同等の資格の専門家) に修正を依頼することがしばしば必要になります。 アプリケーション・プログラマーが行えるのは、DBD、PSB、 および生成された制御ブロックに最近変更があったかどうかを見つけ出すことです。

IMS プログラム実行エラー

初期設定エラーがない場合には、以下の点を検査してください。

  1. コンパイラーからの出力。 すべてのエラー・メッセージが解決されているかどうかを確かめてください。
  2. バインダーからの出力。
    • すべての外部参照が解決されていますか?
    • すべての必要なモジュールが組み込まれていましたか?
    • 言語インターフェース・モジュールが正しく組み込まれていましたか?
    • 正しいエントリー・ポイントが指定されていますか?
  3. 使用中の JCL。
    • データベースを含むファイルを説明した情報は正確ですか? 正しくない場合、DBA に相談してください。
    • 正しい形式で DL/I パラメーター・ステートメントを組み込みましたか?
    • EXEC ステートメントに領域サイズ・パラメーターを組み込みましたか? IMS およびプログラムに必要なストレージに対して、十分な大きさの領域あるいは区画を指定しましたか?
    • PCB マスクのフィールドを正しく宣言しましたか?
    • プログラムがアセンブラー言語プログラムである場合には、 レジスターを正しく保管あるいは復元しましたか? 入力点で PCB アドレスのリストを保管しましたか? どの DL/I 呼び出しを出すよりも前に、 レジスター 1 は、フルワードのパラメーター・リストを指示しましたか?
    • COBOL for z/OS® および PL/I for MVS™ and VM について、DL/I 呼び出しの引数に対して使用しているリテラルは、予想どおりの結果を出しましたか? 例えば、PL/I for MVS and VM では、パラメーター・カウントは フルワードの代わりにハーフワードとして生成されていますか? また機能コードは、4 バイトの要求されたフィールドを作成していますか?
    • できるだけ多くの PCB を使用して、 プログラム内で間違った結果を出しているのは何かを判別してください。