新米エンジニアの失敗再発防止メモ

自分そしてこの世界の皆が、同じ失敗をしないためのメモ

Twitterやってます!@rakuton_t
欲しいものリストのブタメンを送ってくれた方、ありがとうございます!

【SQL Server】意図的にテーブル単位で排他的ロックをかけてタイムアウトを発生させる。

ずばり、こうやる。

begin tran
select * from テーブル名 with(TABLOCKX)

--rollback --ロックする必要がなくなったらちゃんとトランザクションを解放しましょう

テストフェーズでは、タイムアウト時の例外処理の動作確認などしたい時がありますよね。
そんなときは上記のSQLを流してテーブルを排他ロックすることで可能になります。

排他ロックとは

一番強いロックですね。
テーブルへの読み込み・書き込みができなくなります。
ので、SELECT系のSQLでもタイムアウトを発生させることができます。

e-words.jp




本番環境ではやらないと思いますが...

begin tranのあとに、
rollbackをちゃんとしてるのにロックがかかったままになっていることが、過去にありました...
システムが一部止まって賠償問題にもなったことがあります。
金額は大きくありませんでしたが、それよりも信頼を損ないます。

対策は、使い終わったクエリウィンドウは閉じることです。そうすればコネクションが切れます。
(オブジェクトエクスプローラーでDB接続を切断してもコネクションは残ります。)
Microsoft SQL Server Management Studioを使用している場合

私の記事が役に立ったら、どうぞ何か買ってください!→ Amazon欲しいものリスト