.NET開発者のためのブログメディア
SQL Serverでロックを確認する方法

データベースからデータを取得する場合は特に考慮は不要ですが、更新や新規登録、削除などを行う場合、「ロック」処理は考慮しないといけない要素です。ロックされているテーブルに対しては処理を行うことができません。ここではSQL Serverを利用して、テーブルのロックを確認する方法を紹介します。
- SE
- ロックって更新や登録、削除処理を行う場合は考慮しないといけない要素ですよね。SQL Serverだとロックを確認することって簡単にできるのですか?
- PL
- ロックを確認することは簡単にできますよ。Transact-SQLをコーディングして確認する必要がありますので、コーディングの組み方などをここで確認していきましょう。
目次
SQL Serverでのロックについて
ロックの種類はいくつか存在します。すべての種類を網羅する必要はありませんが、ここではよく利用されるロックの種類だけでもまずは確認するとしましょう。
■ロックの種類
SQL Serverのロック | ロック名称 | ロック内容 |
---|---|---|
X | 排他ロック | 他のトランザクションからの読み込みと更新が両方とも不可となります。 INSERT/UPDATE/DELETE処理を行う場合、このロック処理が該当します。 |
S | 共有ロック | 他のトランザクションからの読み込みは可能ですが、更新が不可となります。 |
U | 更新ロック | WITH( UPDLOCK )を指定して行うロック処理です。 読み込みは可能ですが、更新は不可となります。 |
SQL Serverでのロックの確認方法について
Transact-SQLを利用して、SQL Serverでのロックを確認する方法を紹介します。参考にしてください。
Transact-SQLでロックを確認する方法1
1
|
SELECT * FROM sys.dm_tran_locks
|
sys.dm_tran_locksにロック情報が格納されています。これだけでも確認はできますが、不要な情報も多く含まれているため、確認しづらいと思われます。そのため、以下の方法で検索することをおすすめします。利用されているSSMSにコピー&ペーストで利用してください。
Transact-SQLでロックを確認する方法2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
SELECT
resource_type AS type --オブジェクトの種類
,resource_associated_entity_id as entity_id --エンティティID
,( CASE WHEN resource_type = 'OBJECT' THEN
OBJECT_NAME( resource_associated_entity_id )
ELSE
( SELECT
OBJECT_NAME( OBJECT_ID )
FROM
sys.partitions
WHERE
hobt_id=resource_associated_entity_id )
END)
AS object_name
,request_mode --ロックの種類
,request_type --要求の種類
,request_status --状態
,request_session_id AS Session_id --セッションID
,(SELECT hostname
FROM sys.sysprocesses
WHERE spid = request_session_id) AS ProcessName
FROM
sys.dm_tran_locks
WHERE
resource_type <> 'DATABASE'
ORDER BY
request_session_id
|
Transact-SQLで強制的にテーブルにロックをかける
1
2
3
4
|
BEGIN TRAN
SELECT * FROM City WITH(TABLOCKX)
WAITFOR DELAY '00:01:00' --強制的にスリープさせる。
COMMIT TRAN
|
実行結果
- SE
- ロック処理はとても大事ですよね。これを怠るとデータベースの整合性が失われて、ユーザーからの信頼も損なってしまいますので、更新系のプログラムを担当する場合は意識してコーディングを行います。
- PL
- 良い心がけですね!更新の際にロック処理を実施することを仕様書に明記しているなんて少ないと思います。そこは開発者自身が、ロックが必要なのかそうでないかを考えて行動するようにしましょう。
ロックの確認方法は覚えておきましょう
ロックを取得して更新する方法は分かっていても、確認する方法まで知らない開発者は多いのではないでしょうか。もちろん両方できるに越したことはないので、この機会に確認する方法も覚えておくことをおすすめします。
Search キーワード検索
Popular 人気の記事
reccomended おすすめ記事
Categories 連載一覧
Tags タグ一覧
Jobs 新着案件
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅)