LoginSignup
0
3

[Oracle DB]トランザクションロックを解除する

Last updated at Posted at 2024-02-01

Oracleでトランザクションロックを解除する流れの覚え書き。

環境

  • Oracle Database 21c

手順

(1) トランザクションロックのかかっているテーブル情報の確認

以下のクエリを実行し、トランザクションロックのかかっているテーブル情報を確認します。
SIDとSESSION#は(2)で使うので、トランザクションロックを解除したいテーブルのものを控えておきます。
なお、DO.OWNERがスキーマ名、DO.OBJECT_NAMEがテーブル名になります。

-- 全ロックを表示: ロックしているもの
SELECT DO.OWNER || '.' || DO.OBJECT_NAME AS OBJECT,
  DECODE(LO.LOCKED_MODE,
     1, 'NULL',
     2, '行共有(SS)',
     3, '行排他(SX)',
     4, '共有(S)',
     5, '共有行排他(SRX)',
     6, '排他(X)',
     '???' ) AS LOCKED_MODE,
  TO_CHAR(L.CTIME / 60,'99990.9') AS MIN,
  LO.ORACLE_USERNAME,
  LO.OS_USER_NAME,
  LO.PROCESS,
  S.SID,
  S.SERIAL#
FROM DBA_OBJECTS DO, V$LOCKED_OBJECT LO, V$LOCK L, V$SESSION S
WHERE DO.OBJECT_ID = LO.OBJECT_ID AND
  LO.SESSION_ID = L.SID AND
  LO.XIDSQN = L.ID2 AND
  LO.PROCESS = S.PROCESS AND
  LO.XIDUSN > 0;

(2) SESSIONのKILL

(1) で控えておいたSIDとSESSION#を使って、SESSIONをKILLします。

-- SESSIONをKILLする: [例] SID = 177, SERIA#L = 4335 の場合
 ALTER SYSTEM KILL SESSION '177,4335';

上記のDDL文実行には、ALTER SYSTEM システム権限が必要です。
実行ユーザーに権限がない場合は、SYSTEMユーザから以下のDCL文を実行して権限を付与して(もらって)ください。

-- ユーザー: ELEONORAに権限を付与する場合
GRANT ALTER SYSTEM TO ELEONORA;

これで、トランザクションロックが解除される(はず)

参考

本記事の内容は、以下のページたちの組み合わせ。
先人の皆さまに感謝!

なお、関連するテーブルの公式リファレンスのページは、以下の通り。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3