トランザクション処理を分ける実装

今回はトランザクション処理のお話です。
例えば下記のような処理があったとします。

このような場合、最後にロールバックすると途中にあるログDBへの書き込みまでロールバックしてしまいます。

逆にログDBに書き込んだタイミングでコミットすると、出荷処理はコミットされて、在庫減算処理はロールバックされるとかで整合性が取れなくなる可能性もあります。

そういった場合に使えるのが、[Execute in new LUW] プロパティです。

DBに書き込む処理をプロシージャ化して、そのプロシージャにあるExecute in new LUWと言うプロパティをTrueにするとトランザクション処理が呼び元と別れて、そのプロシージャ内でのコミットやロールバックは呼び元と切り離されます。

このように実装することにより、コミット単位を分けることができます。

あまり使うことはないかもしれませんが、このようなことが出来ると言うのを知っておけばいざと言う時に役に立つかもしれませんね。

Blog一覧へ