[ORACLE]ブロックテーブルのブロックセッションをキル Kill the block session which blocked tables

For example,  we have a table named foobar. We need to find the block session.
例えば、テーブル名はfoobarのテーブルにブロックセッションがあります。まずそれを探し出す。
SELECT
  object_name,
  oracle_username,
  s.sid,
  s.serial#,
  s.logon_time,
  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 = 'foobar'
;
If we find the block session, then we can kill it.
ブロックセッションを見つければ、キルことができます。
 ALTER SYSTEM kill session 'sid, serial';
 Simple, is it right?
シンプルでしょうか。


Anyway, we have other samples as below.
When you know what locked your table exactly...
無論、もう一つサンプルがあります。
テーブルがブロックされたことを確実にしているであれば、
select s.sid, s.serial#, s.username, s.osuser, s.machine, s.terminal, s.program
from v$session s, v$locked_object l, dba_objects o
where s.sid = l.session_id
and l.object_id = o.object_id
and o.owner = 'KDDI2'
and o.object_name = 'm_com_busines_id';
If you dont know who did this.
やり方がわからなければ、下記のSQLを実行することも可能です。
select s.sid, s.serial#, s.username, s.osuser, s.machine, s.terminal, s.program, o.object_name
from v$session s, v$locked_object l, dba_objects o
where s.sid = l.session_id
and l.object_id = o.object_id;
Then also we can go to kill.
そして、キルこともできます。
alter system kill session 'session ID, serial';

コメント