【PL/I学習|豆知識】メインフレームの堅牢性を支える例外処理:UNDEFINEDFILE (UNDF) の活用術

導入:なぜ今、UNDEFINEDFILEの制御が重要なのか

メインフレームのバッチ処理において、最も基本的かつ致命的な障害の一つが「ファイルが見つからない」という事態です。JCLでのDD定義漏れやデータセット名の誤記は、往々にしてプログラムの異常終了(ABEND)を招きます。しかし、システムを止める前に「なぜエラーになったのか」を明確にログへ出力し、整然と終了処理を行うことが、運用保守の品質を大きく左右します。今回は、PL/Iにおける例外処理の要、UNDEFINEDFILE (UNDF) 条件について解説します。

基礎知識:ON-UnitsとUNDFの仕組み

PL/Iの「ON-Units」は、特定の実行時条件が発生した際に制御を奪うための仕組みです。UNDF条件は、OPEN処理の段階でOSから「ファイルがオープンできない」という通知を受けた際に発火します。
通常のコーディングでは、OPEN時にファイルが存在しないとプログラムが即座にシステム強制終了となりますが、ON UNDEFINEDFILEを定義しておくことで、プログラムは制御を維持したまま、エラーメッセージの出力やリソースの解放といった「後始末」を行うことが可能になります。

実装:安全なファイルアクセスのための解決策

UNDFを制御する際は、特定のファイルのみを監視するように限定することが重要です。全てのファイルに対して一律の例外処理を行うのではなく、ファイル変数(FILE型)を引数に指定することで、どのファイルでエラーが発生したかを特定しやすくなります。

サンプルプログラム:例外をキャッチして安全に終了する

以下のコードは、入力ファイルが存在しない場合にエラーメッセージを表示して正常終了(戻り値セット)させるための実装例です。

/ 処理対象のファイル定義 /
DCL IN_FILE FILE RECORD INPUT;

/ UNDEFINEDFILE発生時の例外処理を定義 /
ON UNDEFINEDFILE(IN_FILE) BEGIN;
PUT SKIP LIST(‘エラー: 入力ファイルが定義されていません。JCLを確認してください。’);
/ 戻り値を設定してプログラムを安全にクローズする /
STOP;
END;

/ ファイルのオープン /
OPEN FILE(IN_FILE);

/ ここに通常の読み込み処理を記述 /
GET FILE(IN_FILE) INTO(REC_BUFFER);

CLOSE FILE(IN_FILE);

応用・注意点:現場で陥りやすい罠

現場でよくある失敗は、ON-Unit内での無限ループです。例外処理の中で再びエラーになる操作を記述すると、最悪の場合、OSによって強制的にタスクが切断されます。また、メインフレーム特有の事情として、JCLのDD文とプログラム内のFILE名が一致していない場合、システムは「ファイルがない」と判断します。
最近のオープン系言語での開発に慣れている方は、例外が発生した際に「再試行(リトライ)」を考えがちですが、メインフレームのバッチ処理においては、一度発生したUNDFは「環境構成の誤り」であることがほとんどです。安易なリトライは避け、エラーログを詳細に出力し、即座に終了させる設計が、結果として運用の早期復旧を助けます。現代的な設計へ移行する際は、この「外部設定(JCL)と実行時例外の密結合」を切り離すような設計思想を持つことが重要です。

コメント

タイトルとURLをコピーしました