sorta kinda...

主にAWS関連ですが、これに限らずいろいろ勉強したことや思ったことを書いていきます。

Oracle のロックされているテーブルのセッションを知りたい [cloudpack OSAKA blog]

ナスです。

RDS for Oracle (v11.2.0.4) のテーブルでずっとロックがかかっているものがあったので、調べたことを備忘録として書きます。

最初に試したのはこのクエリ。

SELECT SID, SERIAL# FROM V$SESSION
WHERE SID IN (
SELECT SID FROM V$LOCK
WHERE TYPE IN ('TM','TX')
);

実行してみると、全く反応が返ってこない…なぜだ…
そもそも V$LOCK の count だけでも反応が返ってこない。なぜだ…

仕方なく、V$LOCK を使うのをやめて、隣に座っている Oracle に詳しい師匠に聞いて下記のクエリに変えてやってみたら、1秒くらいで結果が返ってきました。

SELECT
  object_name,
  oracle_username,
  s.sid,
  s.serial#,
  to_char(s.logon_time,'YYYY/MM/DD HH24:mi:SS DAY'),
  s.program,
  sql_address
FROM v$locked_object l,
  dba_objects o,
  v$session s
WHERE l.OBJECT_ID = o.OBJECT_ID
  AND l.SESSION_ID = s.SID
  AND object_name = 'テーブル名'
;

なんだろう。V$LOCK がおかしくなっているのかな。とりあえずワークアラウンドが見つかったので、良しとしよう。