単一レコードへの複数プロセスからの更新によるデッドロックの可能性
831659Oct 4 2011 — edited Oct 4 2011ある質問サイトで単一レコードを複数プロセスで行ロックする場合、以下のような理由でデッドロックが発生する可能性があるとの記述がありました。
========================================
環境:Oracle10g
同一レコードを複数プロセスが同時に行ロックを掛けようとした場合、
1.Aがレコードのロック状態を検査。ロック無しと判定
2.Bがレコードのロック状態を検査。ロック有りと判定
3.Aがレコードをロック
4.Bがレコードのロック上書きロック
5.Aが更新の為にレコード取得を試みる。が、4でBにロックされている為、ロックが解除されるまで処理待ち
6.Bが更新の為にレコード取得を試みる。が、3でAにロックされている為、ロックが解除されるまで処理待ち
7.デッドロック発生
========================================
このようなことは本当に起こるのでしょうか?
もし起こるのであれば行ロックもうかつに使えず、全ての排他処理はプロセス側でセマフォやミューテックスを使い制御する必要があることになりますよね?
どなたか知っている人がいたら教えていただきたいと思います。