вторник, 2 августа 2011 г.

Oracle: убить сессию

Чтобы прибить зависшую сессию, делаем следующее:

смотрим список запущенных сессий:
select s.sid, s.serial#, s.username, s.osuser, s.status, s.program, s.module, p.spid
from v$session s, v$process p
where s.paddr = p.addr
order by username;

убиваем нужную сессию:
alter system kill session '<sid>,<serial#>'

в unix-системах еще может понадобиться прибить процесс (если остался)
kill -9 <spid>

либо сразу прибивать с завершением процессов:
alter system kill session '<sid>,<serial#>' immediate

Для формирования запросов можно воспользоваться PL/SQL -блоком:


declare
begin
for ss in (
select s.sid, s.serial#, s.username, s.osuser, s.status, s.program, s.module, p.spid
from v$session s, v$process p
where s.paddr = p.addr
and s.status = 'INACTIVE' and s.username like 'OPER%'
order by username)
loop
dbms_output.put_line('alter system kill session '||''''||ss.sid||','||ss.serial#||''''||' immediate;');
execute_sql('alter system kill session '||''''||ss.sid||','||ss.serial#||''''||' immediate;');
commit;
end loop;
end;

Комментариев нет:

Отправить комментарий