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

 
RE:  排他ロックについて

Date: Thu, 29 Jun 2006 18:36:48 +0900
From: "Akira Horikawa" <who@example.ne.jp>


堀川です、こんにちは

-----Original Message-----
From: "堀江" "正浩" [mailto:who@example.ne.jp]
Sent: Tuesday, June 27, 2006 7:30 AM
To: who@example.ne.jp
Subject: [ml-msde-beg:01835] 排他ロックについて


>排他ロックについて、教えていただければと思います。

レコードの排他ロックは、データを更新するときに使われるものです
update,insert,deleteなどの更新系命令がデータを更新するときに
レコードの排他ロックを掛けて、そのトランザクションが終了するまで保持します。

レコードの排他ロックが掛かっているレコードは、読み出すことはできません。


質問の主旨は、トランザクションの中のSELECTで取得している
レコードを、他のトランザクションのSELECTから見えないように
(読み取れない)したい内容ですね

一番簡単にできる方法は、WITH(XLOCK,PAGLOCK) のページ排他ロックを
使って、読み込んでいるレコードのページを排他ロックすれば、他からその
レコードを読み取ることはできません。
XLOCKは、ページまたはテーブルと組み合わせて使います。

テーブル排他ロック(TABLOCKX)を使えば、テーブルがロックされます。




SELECT命令で、何かレコードの読み込みをお互い阻止し合うのであれば、
アプリケーションロックを使う方法があります。

排他ロックを掛ける
    exec sp_getapplock   '適当に付けた名前' , 'Exclusive'

排他ロックを開放する
    exec sp_releaseapplock  'sp_getapplockで付けた同じ名前'

で制御して下さい




あるいは、排他制御用のダミーのテーブルを用意して、そのテーブルの
レコードを更新することによって、トランザクション終了まで排他ロックが
維持できます。

トランザクション−A
begin  tran
    ダミーのテーブルのレコードを更新する
    SELECT 命令
commit tran



トランザクション−B
begin  tran
    Aとまったく同じ、ダミーのテーブルのレコードを更新する
    SELECT 命令
commit tran

最初にレコードを更新したトランザクションのSELECTは、すぐに実行できる

アプリケーションロック用のストアドを使うより、ダミーのテーブルを使うほうが
間違いが無くてよいでしょう



------------------------------------
Epata-IT/日本技術ソフト開発
        堀川 明  (Akira Horikawa)
    06月29日(木曜日) 18時35分記
        mailto:who@example.ne.jp
        http://www.horikawa.ne.jp/msde/



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


[ウィンドを閉じる]

[MSDE/SQLServer FAQ ]

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

MSDE TOP ページに移動する

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