SQL скрипт для прерывания сессий
В общем случае, убивать зависшие сессии Oracle может быть необходимо для освобождения ресурсов, предотвращения блокировок, устранения ошибок или повышения производительности. Однако, убивать сессии также может иметь негативные последствия, такие как потеря данных, долгий откат транзакций, нарушение целостности или нестабильность системы. Поэтому, перед тем как убивать сессии Oracle, важно понимать причины их зависания, анализировать их состояние и влияние на базу данных, а также выбирать подходящий метод их отмены.
set serveroutput on
declare
fCnt int := 0;
begin
for cKill in
( select 'alter system disconnect session '''||sid||','||serial#||''' immediate' as s
from v$session
where status = 'ACTIVE'
and seconds_in_wait>2*24*60*60
and event in ('single-task message', 'SQL*Net message from dblink', 'SQL*Net more data from dblink')
order by audsid
) loop
dbms_output.put_line(cKill.s||' ...');
begin
execute immediate cKill.s;
fCnt := fCnt + 1;
exception
when others then
dbms_output.put_line(sqlerrm);
end;
end loop;
dbms_output.put_line('Killed '||fCnt);
end;
/
Скачать файл SQL