PB 電子会議室
発言No. | 更新日 | 題名(クリックすると発言内容と関連するコメントが表示されます) |
---|---|---|
4781 | 99/01/26 18:17:20 | RE(2):データ更新時のロック状態表示について By まこと |
4780 | 99/01/26 18:15:41 | RE(1):PB5.0.03: 教えて下さい。 By あすかちゃんの父 |
4777 | 99/01/26 17:45:01 | PB5.0.03: 教えて下さい。 By laputa |
カテゴリ:データベース
日付:1999年01月26日 18:17 発信者:まこと
題名:RE(2):データ更新時のロック状態表示について
>実は、データウィンドウで更新するときに以下のメッセージが
>表示されデータを更新できなくなってしまいました。
>「検索と更新の間に行が変更されました。
> データベースには変更は行なわれませんでした。」
> 以下はSQL文を表示。」
>
>このメッセージはAとBのマシンでA,Bの順で同一レコードを
>抽出してBが先にデータを更新した後にAが更新した場合にAで
>発生するらしいのですがこのような状況はユーザーでは起きてい
>ないのです。
こんにちは まこと です。
上記は僕の所でも起きてます。(UXP/DS Oracle7.3)
起きた時の状況から推測すると、update()を行ってからcommitが終了するまでの間で
マッチングすると発生するように思います。
(ユーザの方でも、Bがcommit中の時にAが更新すると表示されるはずです。)
ですから、update()後にcommitした時点で、ユーザAはユーザBの更新前データに対
して修正を行う事ができ、更新できてしまうようです。
(つまり、ユーザBの入力が無効にされてしまう。 <最近の「ゲッ!」です。>)
Oracleの参考書によると、共有ロックという状態のようです。
これを排他ロックにするには、select文に\"FOR UPDATE NOWAIT\"を付けて下さい。
そうすると、ユーザAがデータを開放するまで他のユーザは参照すらできなくなりま
す。
(保守性はいいですけど、集計するデータには向いてないらしいです。
というか延々と待機状態になるらしい・・)
ちなみに・・・ 更新後、commitして更新フラグをリセットしてもユーザAがデータ
を掴んでいるようなので、画面を閉じる時にRollBackを行うと開放してくれました。
(わけわからん。)
p.s 質問のタイトルは中身を示すものにして下さい。
検索時に抽出できるように・・・
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows95
DBMS Oracle SQL*Net 2.2
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS Oracle 7.3
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.