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 (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.