- PR -

DBへの排他制御の方法について

投稿者投稿内容
マー帽
常連さん
会議室デビュー日: 2006/01/31
投稿数: 21
投稿日時: 2006-05-25 10:34
引用:

takaciniさんの書き込み (2006-05-25 10:17) より:
引用:

■ タイムスタンプ方式による行更新の検出
異なるリビジョンを同一視する可能性があるので不完全。


私もこれがどういうことなのか知りたいです。
ちょっと気になりますので。



こんにちは。
おそらく2つが混同されているのだと思います。

1.datetime型を使用して日付時刻をタイムスタンプとする。
2.SQL-Server 2000のtimestamp型を使用してrowversionシノニムのタイムスタンプを使用する。

上の書き込みでは流れからして1の事が書かれているのだと思いますが、
めだかさん、takaciniさんが使用されているのは2という事ではないでしょうか?

1は時刻合わせや取得できる精度の問題もあって重複する可能性があり、
SQL-Server 2000でtimestamp型を使用すると2となって、データベース内で
一意である事が保証されるという違いでしょう。

SQL-Server 2000のtimestamp型は、見た目には連番の様なデータになりますよね。


[ メッセージ編集済み 編集者: マー帽 編集日時 2006-05-25 10:37 ]

[ メッセージ編集済み 編集者: マー帽 編集日時 2006-05-25 10:39 ]
マー帽
常連さん
会議室デビュー日: 2006/01/31
投稿数: 21
投稿日時: 2006-05-25 10:49
引用:

SQL-Server 2000でtimestamp型を使用すると2となって、データベース内で
一意である事が保証されるという違いでしょう。



SQL-Server 2000のtimestamp型に使用される値は
DB毎の「@@DBTS」に設定されているそうです。

一時テーブルに作成した場合はtempdbの@@DBTSが使用される様ですね。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2006-05-25 10:57
引用:

マー帽さんの書き込み (2006-05-25 10:34) より:
1.datetime型を使用して日付時刻をタイムスタンプとする。


私の投稿はこちらの条件です。一般論ですので。

DBMSのネイティブな機能を使う場合は問題ないでしょう。
問題があるとすれば互換性に関してですね。

#このスレッドってSQL Serverに限定されてましたっけ?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-05-28 19:17
引用:

あしゅさんの書き込み (2006-05-25 10:28) より:

同一時刻に更新が入った場合は、実際の更新回数(リビジョン)が異なるのに
検出できない可能性がありますよね?それを異なるリビジョンの同一視と
表現しました。


そういうことってあり得るの?

 端末Aからの更新と、端末Bからの更新が全く同じ時に発生し、全く同じ時に UPDATE 文が更新される、ってことですよね?で、全く同時だから、同一性の保証に使う更新時刻が、AからもBからも更新されておらず、従ってAもBも更新が可能、と。

あり得るなら、更新回数でのチェックはどうやって、それを防ぐのでしょう?同じように、まだ更新されていないものを比較して、同じだと判断されるのではないでしょうか?


 昔聞いた話ですが、サーバに使うようなコンピュータは、内蔵時計が遅れる方向に調整されているそうです。もし実際の時間より進んでしまうと、内蔵時計を戻すため、時間が重複する可能性があると。遅れる方向に調整されているなら、飛ぶことはあっても重複はしない、と。

 まぁ、最近はパーソナル コンピュータをサーバ用途で使いますから(略)

スキルアップ/キャリアアップ(JOB@IT)