MSDE FunClub
Microsoft Data Engine FunClub
MSDE初心者向けメーリングリスト過去ログ[1731]番
 
[TOP]>[MSDE初心者向けメーリングリスト過去ログ(1731番)]>[ウィンドを閉じる]
 
SQLServer2005時代でも
開発の基本は T-SQL
上巻で T-SQL の基礎作り
 
SQLServer2005時代でも
運用の基本はバックアップ
下巻でバックアップ手法を学びましょう
PASSJ人気コンテンツで学んだ後は下巻でさらなる学習を!
 
ウィンドを閉じる
MSDE/SQLServer FAQ
MSDE / MSDE2000 
技術情報サポート
初心者向け
メーリングリスト
過去ログの表示
技術者向け
メーリングリスト
過去ログの表示
メーリングリスト
活動状況の
表示
MSDE TOP メニュー
MSDEトップメニューに移動します
 

 
行単位の排他ロックに関して

Date: Thu, 15 Dec 2005 15:59:28 +0900
From: who@example.co.jp


排他ロック方法に関して質問がございます。

レコード単位に更新ロックをかけたいのですが、
奇妙な動作になってしまいました。
何か間違ってますでしょうか?
少し長文になってしまいますが宜しくお願いします。

【テスト環境&手順】
OSQLでデータベースのテストを行います。
テスト用にテーブルTESTを作成。
レコード5件作成。

[手順1]
全てを表示すると以下のようになります。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
1> SELECT * FROM TEST
2> GO
 A
------------
           5
           3
           1
           2
           4
(5件処理されました)
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[手順2]
A=1のレコードを行単位に排他ロックで取得。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
1> BEGIN TRANSACTION
2> SELECT A FROM TEST
3> WITH (ROWLOCK,UPDLOCK)
4> WHERE A=1
5> GO
 A
------------
           1
(1件処理されました)
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

A=1のレコードはロック中のはずです。
[手順3]
別のOSQLを起動し別プロセスからこのレコードにアクセスしてみます。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
1> BEGIN TRANSACTION
2> SELECT A FROM TEST
3> WITH (ROWLOCK,UPDLOCK)
4> WHERE A=1
5> GO
メッセージ 1222、レベル16、状態50、サーバー MSDE_SERBER、行4
ロック要求がタイムアウトしました。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
※LOCK_TIMEOUTは0にしすぐにタイムアウトするようにしています。
思惑通りです。

[手順4]
同じように今度は別レコードを取得します。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
1> BEGIN TRANSACTION
2> SELECT A FROM TEST
3> WITH (ROWLOCK,UPDLOCK)
4> WHERE A=4
5> GO
メッセージ 1222、レベル16、状態50、サーバー MSDE_SERBER、行4
ロック要求がタイムアウトしました。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
なぜかROWLOCKを指定しているのにも関わらずロックされています!

別のレコードもやってみます。
[手順5]
A=5のレコードを取得します。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
1> BEGIN TRANSACTION
2> SELECT A FROM TEST
3> WITH (ROWLOCK,UPDLOCK)
4> WHERE A=5
5> GO
 A
------------
           5
メッセージ 1222、レベル16、状態50、サーバー MSDE_SERBER、行4
ロック要求がタイムアウトしました。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
レコードが取れています。そしてタイムアウトのメッセージも
きています。
どうやら、ロックされているレコード行(A=1)よりも
手順1で取得したレコード順で見て、後ろにあるレコードの
場合は手順4の動作、前にあるレコードの場合は手順5の動作を
するようです。

レコード単位でロックしたいのですが、何か間違っていますでしょうか?
宜しくお願いします。





[MSDE/SQLServerに関して、今、どんなことにお困りですか?]
よろしければお困りの内容を、電子メールで教えて下さい。
質問を電子メールで作成する


[ウィンドを閉じる]

[MSDE/SQLServer FAQ ]

[MSDE / MSDE2000 技術サポート情報一覧]

MSDE TOP ページに移動する

 
 
 
 
 
 
 
MSDE FunClubに関するご意見・ご要望等ございましたら、
msdefun@horikawa.ne.jp までご連絡下さい。
MSDEを始めとする各種データベースシステムの開発、コンサルタントに関するご要望等は、
msdedev@horikawa.ne.jp までご連絡下さい。