AS400のRNX8888再帰的エラー対応|ジョブログとCALL関係から原因を追う確認手順

AS400のRNX8888メッセージの詳細画面
RNX8888の「追加のメッセージ情報」。重大度50、メッセージ・タイプはエスケープ、原因として「RPGプロシージャーが自身または他のプロシージャーを呼び出してから、プロシージャーを呼び出した」と出ています。ジョブログの一覧ではここまで見えません。メッセージにカーソルを当ててF1を押すと、この画面に入れます。

RNX8888で最初に見るポイント

RNX8888の追加メッセージ情報
RNX8888を7番で開いた画面です。メッセージ・タイプはエスケープ、重大度50。「が再帰的に呼び出された」という原因と、「プログラムの保守担当者に連絡して」という回復手順まで出ます。プログラム名とプロシージャー名は伏せてあります。

RNX8888は、ILE RPGのサイクル主プロシージャーが再帰的に呼び出されたことを示すエスケープ・メッセージです。単に例外処理中に別のエラーが出たことを意味する番号ではありません。IBM公式の実行時の違いでは、サブプロシージャーの再帰は許されると説明されています。

呼び出し関係の想定例として、処理AがBを呼び、Bから実行中のAへ戻る経路を考えます。通常処理だけでなく、エラー処理やトリガーから呼び戻される経路も調べます。これは説明用の例であり、掲載画面の原因をこの経路と断定するものではありません。

  • ジョブログでRNX8888の直前にあるCPF/RNXメッセージを見る
  • CALL関係とプログラムスタックを確認する
  • エラー処理やログ出力から、まだ戻っていないサイクル主プロシージャーを呼び直していないか見る
  • ファイル更新が絡む場合は、対象ファイルとキーを確認する
  • 本番対応では、ジョブ終了、リラン、データ補正を急いで決めない

ジョブログの基本的な読み方はAS400のジョブログ確認手順で、CPFメッセージの入口はAS400 CPFエラー・メッセージID索引で整理しています。症状から探す場合はAS400トラブル逆引きも使えます。

RNX8888の直前メッセージから追う例

RNX8888の詳細にある再帰呼び出しの説明を起点に、同じジョブの呼び出しスタックとソースを照合します。直前の別エラーが呼び戻しのきっかけになったかも確認しますが、先行エラーがあるとは限りません。

確認点確認内容判断
時系列RNX8888より前のCPF/RNXと送信元プログラムを記録する最初の異常と後続エラーを分ける
呼び出しプログラム/プロシージャーのCALL関係とエラー処理経路を整理する。EXSRによるサブルーチン実行とは区別する同じ処理へ戻る条件をソースで確認する
入力発生データ、パラメータ、再現条件、直前変更を比較する特定データだけか全件かを分ける

修正後は正常系だけでなく、元のエラー条件を再現し、エラー処理が再び自分自身を呼ばないことを確認します。調査メモには、確認したプログラムと未確認の経路を残します。

RNX8888を相談する前に残す情報

本番でRNX8888が発生したら、発生時刻、ジョブ識別情報、対象プログラム・プロシージャー、呼び出しスタック、直前のメッセージ、業務影響を残します。例外処理中に発生した場合も、実際にどこで再帰呼び出しになったかを確認します。返信や再実行は、途中更新と承認条件を確認して判断します。

残す情報確認する記事
本番影響と初動判断本番トラブル初動チェックリスト
QSYSOPRやMSGWの状態MSGWの確認手順
症状別の確認入口AS400トラブル逆引き
改修前の影響範囲RPG/CLの影響調査チェックリスト

再帰呼び出しの仕様を確認する

サブプロシージャーや線形主プロシージャーの再帰と、サイクル主プロシージャーへの再入は扱いが違います。IBM公式:Recursive Callsで対象の種類を確認してください。