アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつも、お世話になっております。

現在、ASP.NetとOracle9iでWebアプリケーションを開発しています。
現在、複数のユーザがほぼ同時に同一のデータに更新をかけられないよう
にする処理で悩んでいます。

今まで開発してきたシステムでは、各データに更新回数を持たして、
その数をチェックすることにより、同時に更新されることを防いできました。
具体的には、

ユーザA:データ取得(このときの更新回数X)

ユーザB:データ取得(このときの更新回数X)

(ユーザA,B共に画面などで、データ操作)

ユーザA:トランザクション開始
このとき、取得した更新回数を再度取得、X
ユーザAが先に取得したときと更新回数が同一のため、データは更新されていない。
データ更新処理を許可する
データ更新を行い、更新回数を+1する
コミット

ユーザB:トランザクション開始
このとき、取得した更新回数を再度取得、X+1
ユーザBが先に取得したときと更新回数が同一でないため、データは更新されている
データの更新は許可しない
ロールバック
という処理を行っています。

しかし、この方法では、ユーザAがデータ更新を行う直前でかつ、ユーザBが更新回数のチェックを行うというタイミングだと、ユーザBがデータの更新ができてしまうようです。

より安全に重複更新を避けたいのですが、良い手はございませんか?ご存知でしたら、教えていただけないでしょうか?宜しくお願いいたします。

A 回答 (2件)

排他制御はそれぞれの業務により向き不向きがあるため、一概にこうした方がよい...とは言えないですが。

。。
http://www.atmarkit.co.jp/fdotnet/entwebapp/entw …

# 自分であれば更新日時を保持し SELECT FOR UPDATE 使うかな
    • good
    • 0
この回答へのお礼

会社からログインできないので、返信が遅くなってしまいまいました。
@ITのページを参考にさせて頂きました。
ありがとうございました。

お礼日時:2006/01/31 00:28

更新日時が記録されてるならそれを利用するとか。


あとは、ADO.NET の DataAdapter コントロールに自動的に UpdateCommand を作らせると、全ての列を比較して更新する SQL 文と作ります。(相手が SQL Server の場合しか経験ないですけど)
    • good
    • 0
この回答へのお礼

返信が遅くなってしまいました。
打合せの参考にさせて頂きました。
ありがとうございました。

お礼日時:2006/01/31 00:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!