Date: Tue, 30 Oct 2001 13:22:28 +0900
From: 新田 則之 <who@sub.example.jp>
(有)ビジネス・サポートの新田と申します。 お世話になります。
Windows2000ServerSP2上で
MS00-092、MS01-032、MS01-041、の修正モジュールを適用して
サービスパックは未適用の SQL Server 2000 Desktop Engine (MSDE2000)
を稼動させています。
コネクションAの中でトランザクションを発生させておき
select * from [テーブル名] with (TABLOCK, UPDLOCK)
を発行した状態で
別のコネクションBの中でトランザクションを発生させ
select * from [テーブル名] with (TABLOCK)
を発行すると、ロック解除待ちの状態になってしまいます。
どちらのトランザクションも
「SET TRANSACTION ISOLATION LEVEL」ステートメントで分離レベルを変更していないので
既定の「READ COMMITTED」の分離レベルで動作しているはずです。
BooksOnline の「ロックのヒント」の「UPDLOCK」には
UPDLOCK には、ほかのユーザーがデータを読むことをブロックせずに
データを読み取ることができます。
との記述があるので、コネクションBのSelect文はブロックされないはずなのですが…
ちなみに、同様の環境で
コネクションA … select * from [テーブル名] with (ROWLOCK, UPDLOCK)
コネクションB … select * from [テーブル名] with (ROWLOCK)
だと、コネクションBのSelect文は無事実行されるので
この場合はBooksOnline の記述通りの動きです。
どなたか
コネクションA … select * from [テーブル名] with (TABLOCK, UPDLOCK)
コネクションB … select * from [テーブル名] with (TABLOCK)
で、コネクションBのSelect文を実行させる方法をご存知の方がいらっしゃいましたら
お教え頂ければ幸いです。
どうぞ、よろしくお願いいたします。
[MSDE/SQLServerに関して、今、どんなことにお困りですか?] |
よろしければお困りの内容を、電子メールで教えて下さい。 |
質問を電子メールで作成する
|
[ウィンドを閉じる][MSDE/SQLServer FAQ ][MSDE / MSDE2000 技術サポート情報一覧]
|