前几天研发的一个新功能把数据库拖死了,导致整个系统非常的慢,就连查询数据也非常的慢,后经核实一个更新操作占了30多个锁,无奈只要要把每个更新语句杀掉,但是当时要查看每个sid对应的执行的具体sql是什么,突然间就记不得那个视图了,当时急坏我了,后来用最笨的方法,查看每个与之相关的视图里具体有哪些字段,经过一番折腾终于找到了。
为了避免忘记,记录下以便日后可快捷的查询。
select b.SQL_TEXT,
a.SID,
a.SERIAL#,
'alter system kill session ' || '''' || a.sid || ',' || a.SERIAL# ||
''';'
from v$session a, v$sqlarea b
where a.SQL_HASH_VALUE = b.HASH_VALUE
and a.sid in (select sess.sid
from v$locked_object lo, dba_objects ao, v$session sess
where ao.object_id = lo.object_id
and lo.session_id = sess.SID)
下面是杀掉存储过程导致死锁的语句
select b.sid,
b.SERIAL#,
a.OBJECT,
'alter system kill session ' || '''' || b.sid || ',' || b.SERIAL# ||
''';' kill_command
from SYS.V_$ACCESS a, SYS.V_$session b
where a.type = 'PROCEDURE'
and (a.OBJECT like upper('%存储过程名%') or a.OBJECT like lower('%存储过程名%')) ---存储过程名
and a.sid = b.sid
and b.status = 'ACTIVE';