ITエンジニアの成長ブログ

ITエンジニアとして行う勉強の発信&日々の生活で体験した楽しいことをゆるく発信

SQL Serverでトランザクションのロックを解放する方法②

前回の記事で、SQL Serverトランザクションのロックを解放する方法を紹介しましたが、
SQLではなく、SSMS(SQL Server Management Studio)のGUI操作のみでロックを解放する手順もありましたので、今回はそちらを紹介したいと思います。

過去記事は以下になりますので、よければこちらもお読みいただければ嬉しいです。
mr-star.hatenablog.com

前提

過去記事と同様に、以下のようなサンプルのテーブルをこれからの説明で使用します。

CREATE TABLE [dbo].[Table_1](
	[column1] [int] NULL,
	[column2] [varchar](50) NULL
) ON [PRIMARY]
GO
f:id:mr_star:20210819135252p:plain
サンプルデータ

トランザクションロック解放方法

それでは、さっそく確認していきましょう。
まず、SSMSでインスタンスに接続してオブジェクトエクスプローラーで対象のインスタンスを右クリック - 「利用状況モニター」を選択します。
そうすると、利用状況モニターと呼ばれる画面が開きます。

利用状況モニターは、今回のようなロックの解放にはもちろん使えますが、そのほかにも様々な項目を確認することができます。今回は、ロックの解放部分に絞って解説します。

それでは、準備作業としてトランザクションを開始して値の更新を行い、コミットせずにロックの状態を作っておきます。

f:id:mr_star:20210819135717p:plain
トランザクションロック解放方法①

利用状況モニターの「プロセス」タブを選択すると以下のような画面が開きます。これは現在インスタンスに接続している、プロセスの一覧となっており、先ほどのUPDATE文を実行しているプロセスも、この中にあります。

f:id:mr_star:20210819182812p:plain
トランザクションロック解放方法②

UPDATE文を実行しているテーブルのデータベース名は”testdb”なので、このプロセス一覧のデータベース列が"testdb"のいずれかが、UPDATE文を実行しているプロセスだと思われます。ただ、今回のように同じデータベース名が複数ある場合は、どれが該当のプロセスであるかは一覧の情報のみでは判断できないと思います。

そこで、役に立つのが詳細情報を見ることです。該当のプロセスを選択して右クリック-「詳細」を押下すると、なんと以下のようにSQL文が表示されます。これはそのプロセスが実行したSQL文なので、この情報を頼りにすることでどのプロセスが解放すべきものであるかが判断できます。

f:id:mr_star:20210819183359p:plain
トランザクションロック解放方法③

該当のプロセスが判明したら、先ほどの詳細画面の左下の「強制終了」ボタンを押下します。すると、トランザクションのロックが解放されます。

おわりに

いかがでしたでしょうか。SSMSの利用状況モニターを使用することで、とても簡単にトランザクションのロックを解放することができます。今回はロックの解放だけでしたが、たとえば原因不明なロック待ちが発生していたりする場合はこの利用状況モニターのプロセス欄を見ることで、どのトランザクションがブロックしているのかもわかります。これは今度記事にしたいと思います。

最後までお読みいただきありがとうございました。この辺で失礼いたします。