ナスです。
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 がおかしくなっているのかな。とりあえずワークアラウンドが見つかったので、良しとしよう。