Symfoware ServerでREAD UNCOMMITTEDを利用した場合の留意点について

Symfoware Server の技術情報はこちら

READ UNCOMMITTEDを利用した場合の検索において、ほかのトランザクションで更新した順番でレコードを参照することができませんでした。READ UNCOMMITTEDを利用した時の動作について教えてください。
独立性水準にREAD UNCOMMITTEDを指定した場合、またはSELECT文の占有モードにNO LOCKを指定した場合、ほかのトランザクションで更新し、まだCOMMITされていないデータが読み込まれる現象(ダーティ・リード)が発生する可能性があります。このため、読み込まれるデータの一貫性、および他トランザクションで更新した順番でのデータの読み込みは保証されません。

以下にダーティ・リードにより発生する事象例を示します。
  • 検索条件にインデックスのキーとなるカラムを指定した場合と指定しない場合とで、検索結果が異なる場合がある。
  • ORDER BY句を指定した場合と指定しない場合とで、検索結果が異なる場合がある。
  • 他トランザクションで後から更新したデータは参照できるが、先に更新したデータが参照できない場合がある。
  • 他トランザクションで更新の対象となったレコードの更新前データおよび更新後データともに参照できない場合がある。

このような事象を避けるためには、SELECT文の占有モードにFREE LOCK/SHARE LOCK/EXCLUSIVE LOCKのいずれかを指定、もしくは独立性水準にREAD COMMITTED/REPEATABLE READ/SERIALIZABLEのいずれかを指定する必要があります。
※占有モードや独立性水準の変更により、データの一貫性を保証するためのロックが取得され、ロック待ちやデッドロックが発生する可能性があります。アプリケーション多重実行の動作検証を実施して、業務影響が発生しないことを確認してください。

詳細は以下のマニュアルを参照してください。
 Symfoware Server V12.2.0 アプリケーション開発ガイド(共通編)
  第1部 アプリケーション開発における基礎知識
   第1章 アプリケーションの設計に必要な概念
    1.1 トランザクションと排他制御

なお、上記以外の製品バージョン/レベルについては、該当するマニュアル箇所を参照してください。
製品・サービス区分 Symfoware
製品・サービス情報
対象製品 Symfoware Server (Native Interface)
プラットフォーム Windows, Solaris, Linux
アンサー種別 設計/開発
このページの先頭へ