0

以下のシナリオで問題が発生しています。

プログラム 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 からレコード ロックの状況を克服した理由を教えてください。

よろしく、スリ

4

2 に答える 2

1

WAITRCD = *NOMAX でファイルをコンパイルしないでください。ジョブがロックを待機する必要がある場合は、OVRDBF を使用して待機時間を調整します。インタラクティブなジョブで待機しているバッチ ジョブがあり、誰かがデスクトップでレコードを開いたままにしているためにタイムアウトになっているため、あなたは待っていると思います。対話型プログラムは、更新の準備が整うまでレコードをロックしてはなりません。これにより、この問題が最初に防止されます。

于 2014-12-19T03:01:16.797 に答える