Date: Tue, 30 Oct 2001 18:39:13 +0900
From: 新田 則之 <who@sub.example.jp>
新田です。
谷さん、ご回答ありがとうございます。
Kenji Tani wrote:
> 「UPDLOCK は、必要に応じて自動的に排他ロックに変換される」
> というのが、Inside SQL Server 7.0 に記載されていました。
> # 必要に応じてというところが怪しいですね。
そうですか…
SQL Server 2000 BooksOnline で探してみましたが
そのような記述は見つかりませんでした。
実は、こちらに投稿する前に
マイクロソフトのサポートニュースグループ(microsoft.private.jp.vap.sqlserver)
に問い合わせてみたのですが、全く何も答えてもらえませんでしたので
マイクロソフトとしても公にされたくないような動作なのかもしれませんね。
「アーキテクチャ徹底解説 Microsoft SQL Server 2000」
(原書:Inside Microsoft SQL Server 2000)
という書籍が発行されているようなので
「Inside SQL Server 7.0」と同様の記述があるかどうか確認してみます。
> 「ロックヒントは、セッションの分離レベルを無効にする」
> との記載が、Books Online にあります。
確かに、SQL Server 2000 BooksOnline の「ロックのヒント」の箇所に
「ロック ヒントは、セッションの現在のトランザクション分離レベルを無効にします。」
という記述があります。
ただ、BooksOnline の「FROM」の箇所には
粒度ヒント:PAGLOCK、NOLOCK、ROWLOCK、TABLOCK、TABLOCKX
分離レベル ヒント:HOLDLOCK、NOLOCK、READCOMMITTED、REPEATABLEREAD、SERIALIZABLE
という記述があるので、私の方は
「トランザクション分離レベルを無効になるのは、分離レベル ヒントを指定したときで
粒度ヒントだけの指定では、トランザクション分離レベルは無効にはならない」
と解釈していました。
ですので、単に
select * from [テーブル名] with (TABLOCK)
という記述だけなら、トランザクション分離レベルは無効にならず
分離レベルが既定の「READ COMMITTED」で動作しているならば
たとえ他セッションでテーブルが(TABLOCK, UPDLOCK)でロックされていても
「select * from [テーブル名] with (TABLOCK)」
でテーブルを読み込めると思っていたのですが、そうではないのでしょうか?
[MSDE/SQLServerに関して、今、どんなことにお困りですか?] |
よろしければお困りの内容を、電子メールで教えて下さい。 |
質問を電子メールで作成する
|
[ウィンドを閉じる][MSDE/SQLServer FAQ ][MSDE / MSDE2000 技術サポート情報一覧]
|