きり丸の技術日記

技術検証したり、資格等をここに残していきます。

OracleのFOR UPDATEの排他ロックを解除する

既に同様の記事がありますが、自分の備忘録として残しておきます。

トランザクションをCOMMITしたり、ROLLBACKしたりすると、FOR UPDATEで行ったロックが外れます。しかし、デバッグしながら動作検証する等々でCOMMITROLLBACKもせずに処理を終了してしまうと、排他ロックをしたままになってしまい、対象のデータの処理ができなくなります。

今回の記事では、Oracleで排他ロックがかかりっぱなしになった時に、排他ロックを解除するためのコマンドを残します。

環境

  • Oracle
    • 11g
    • Docker

使い方

次のSQLで排他ロックがかかっているSID, SERIAL#を調べます。

SELECT SID, SERIAL#, SADDR, MACHINE, USERNAME, PROGRAM
FROM V$SESSION
WHERE SID = ANY (SELECT SID FROM V$LCOK WHERE TYPE IN ('TX', 'TM'));

調べたSID, SERIAL#を元に、次のコマンドを実行します。カンマも含めて実行する必要があります。

-- ALTER SYSTEM KILL SESSION '{SID, SERIAL#}';
ALTER SYSTEM KILL SESSION '36, 2471'

終わりに

毎回、調べる際に地味に時間がかかってしまっていたので、ブログに残しておきます。Oracleが有償であることもあって個人では検証しないのですが、今後の現場でもOracleを使うことはあると思うので、機会があれば残しておきたいですね。


この記事がお役に立ちましたら、各種SNSでのシェアや、今後も情報発信しますのでフォローよろしくお願いします。

参考記事

f:id:nainaistar:20210611191503p:plain