前回の記事で、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
トランザクションロック解放方法
それでは、さっそく確認していきましょう。
まず、SSMSでインスタンスに接続してオブジェクトエクスプローラーで対象のインスタンスを右クリック - 「利用状況モニター」を選択します。
そうすると、利用状況モニターと呼ばれる画面が開きます。
利用状況モニターは、今回のようなロックの解放にはもちろん使えますが、そのほかにも様々な項目を確認することができます。今回は、ロックの解放部分に絞って解説します。
それでは、準備作業としてトランザクションを開始して値の更新を行い、コミットせずにロックの状態を作っておきます。
利用状況モニターの「プロセス」タブを選択すると以下のような画面が開きます。これは現在インスタンスに接続している、プロセスの一覧となっており、先ほどのUPDATE文を実行しているプロセスも、この中にあります。
UPDATE文を実行しているテーブルのデータベース名は”testdb”なので、このプロセス一覧のデータベース列が"testdb"のいずれかが、UPDATE文を実行しているプロセスだと思われます。ただ、今回のように同じデータベース名が複数ある場合は、どれが該当のプロセスであるかは一覧の情報のみでは判断できないと思います。
そこで、役に立つのが詳細情報を見ることです。該当のプロセスを選択して右クリック-「詳細」を押下すると、なんと以下のようにSQL文が表示されます。これはそのプロセスが実行したSQL文なので、この情報を頼りにすることでどのプロセスが解放すべきものであるかが判断できます。
該当のプロセスが判明したら、先ほどの詳細画面の左下の「強制終了」ボタンを押下します。すると、トランザクションのロックが解放されます。