4 つのクローンを持つ WebSphere クラスターがあります。各クローンで同一のコードが実行されます。コードを実行するジョブを Quartz に定期的に開始させます。
このコードは、クローンの 1 つだけがテーブルを正常に更新できるように、テーブル内の行を更新しようとします。その後、そのクローンが残りのジョブを実行します。何かのようなもの:
update <table> set status = 'RUNNING' where job_name = 'JOB1' and status = 'STOPPED'
update ステートメントを実行するときにトランザクションを開始しません。
4 つのクローンすべてがテーブルの更新に失敗し、すべてロック タイムアウト エラー (SQL コード -913) が発生することがあります。
また、トランザクションを開始し、行が実行中としてマークされているかどうかを選択して確認し、そうでない場合は更新を実行してコミットするという代替手段も試しました。それ以外の場合はロールバックします。
それには同じ問題がありました。
まだ試していない解決策の 1 つは、select を「select for update」に変更することです。
助言がありますか?