複数のマシンで実行され、Oracle データベースにアクセスするコードがいくつかあります。行をロックすることにより、このデータベースを (特に) 異なるマシン間の同期オブジェクトとして使用します。
私が抱えている問題は、プロセスが開始されたときに、データベースに同期に依存するものがまだなく、unique constraint violated
すべてのプロセスが同時に挿入しようとするため、プロセスが Oracle 例外を取得することです。
今のところ私の解決策は、その正確な例外をキャッチして無視することですが、アプリケーションの通常のワークフローで例外がスローされるのはあまり好きではありません。
データベースでアトミックに「テストして挿入」するより良い方法はありますか? 行を挿入するときにテーブル/パーティション全体をロックすることは、受け入れられる解決策ではありません。
それが私の解決策だと思ってチェックmerge into
しましたが、同じ問題が発生します。