以下のシナリオで問題が発生しています。
プログラム A からのファイル MYFILE にレコード ロックがあります。後でセッションが MYFILE のレコード ロックで突然切断され、キャンセル ハンドラ ルーチンが実行されます。キャンセル ハンドラ プログラム ルーチン (プログラム B) では、MYFILE でロックされているレコードを削除しようとし、ファイル MYFILE が NOMAX の WAITRCD 時間でコンパイルされているため、セッションがハングします。これで、他のセッションからの更新アクションについても、誰もアカウントにアクセスできなくなります。
プログラムの流れを以下に示します。
.... .... プログラム A (レコード ロック) .... プログラム X (キャンセル ハンドラ) ->OVRDBF WAITRCD(3) を追加 .... プログラム B (セッション フリーズ) -> 上記 OVRDBF を追加後、セッションプログラム C をフリーズしませんでした (セッション フリーズが発生します) -> オーバーライドが存在することがわかります。それは同じデフォルトのアクティベーション グループであり、コミットメント制御もトリガーもありません。
ここでのシナリオは次のとおりです。同じジョブ/セッションによるレコード ロック。
問題を解決するために以下の解決策を試しました:
キャンセル ハンドラ プログラム (プログラム B) で、3 ~ 5 秒の WAITRCD で OVRDBF を実行しました。後で上記の手順を実行し、ハンドラー プログラムをキャンセルすると、ロックされたレコードを削除するのに疲れ、3 ~ 5 秒後に次の手順で処理を続行し、ロックされたレコードのエラー メッセージを書き込みました。画面フリーズはありませんでした。その後、別のプログラム C を実行し、MYFILE 内のロックされたレコードを削除しようとしました。しかし、セッションが再びハングします。
呼び出しスタックを確認したところ、すべてのプログラムがデフォルトの活動化グループの下にあり、コミットメント制御もトリガーもありません。プログラム C からではなく、プログラム B からレコード ロックの状況を克服した理由を教えてください。
よろしく、スリ