時計の鍵をかけた人を見つける


会社がOracleロック・テーブルの問題を解決する際に調べた資料:
 select a.object_name,
        l.session_id,
        l.oracle_username,
        l.os_user_name,
        s.machine,
        s.sid,
        s.sql_address,
        s.sql_hash_value,
        s.sql_id,
        s.sql_child_number
   from v$session s, v$locked_object l, all_objects a
  where l.process = s.process
    and a.object_id = l.object_id

このセクションでは、ロックされたすべてのセッションとテーブルを調べることができ、ロックされたテーブルの最初のsql操作をもたらすセッションを含む.最も重要なのは、誰が鍵をかけたのかを見つけることができます.PKを探したり、sessionを殺したりすることができます.
 select c.object_name,
        l.session_id,
        l.oracle_username,
        s.machine,
        l.os_user_name,
        s.sid,
        s.program,
        st.sql_text
   from v$session               s,
        v$locked_object         l,
        all_objects             c,
        v$sqltext_with_newlines st
  where s.process = l.process
    and c.object_id = l.object_id
    and st.address = s.sql_address
   order by s.sid, st.piece

1つ以上のSQLがブロックされている場合は、このSQLを使用して、ブロックされているSQLが何であるかを特定し、どのレコードがロックされているかを特定できます.
select s.username user_name,
       o.owner || '.' || o.object_name object_name,
       s.sid || ',' || s.serial# sid_serial#,
       s.program,
       sq.sql_text
  from dba_objects o, v$session s, v$lock v, v$sqltext_with_newlines sq
 where v.id1 = o.object_id
   and v.sid = s.sid
   and (v.type = 'tm' or v.type = 'hw')
   and s.sql_address = sq.address
 order by program, object_name, s.sid, sq.piece;

この部分は上の部分と同じですが、表示されている情報は多少違います.うちの会社の大牛たちが提供しています.