Last modified by Александр Таболин on 2023/07/24 18:25

Show last authors
1 В общем случае, убивать зависшие сессии Oracle может быть необходимо для освобождения ресурсов, предотвращения блокировок, устранения ошибок или повышения производительности. Однако, убивать сессии также может иметь негативные последствия, такие как потеря данных, долгий откат транзакций, нарушение целостности или нестабильность системы. Поэтому, перед тем как убивать сессии Oracle, важно понимать причины их зависания, анализировать их состояние и влияние на базу данных, а также выбирать подходящий метод их отмены.
2
3
4 (% style="font-size: 14px; font-family: Consolas; background-color:#fbfdff" %)
5 set serveroutput on
6
7 (% style="font-size: 14px; font-family: Consolas; background-color:#fbfdff" %)
8 declare
9 fCnt int := 0;
10 begin
11 for cKill in
12 ( select 'alter system disconnect session '''||sid||','||serial#||''' immediate' as s
13 from v$session
14 where status = 'ACTIVE'
15 and seconds_in_wait>2*24*60*60
16 and event in ('single-task message', 'SQL*Net message from dblink', 'SQL*Net more data from dblink')
17 order by audsid
18 ) loop
19 dbms_output.put_line(cKill.s||' ...');
20 begin
21 execute immediate cKill.s;
22 fCnt := fCnt + 1;
23 exception
24 when others then
25 dbms_output.put_line(sqlerrm);
26 end;
27 end loop;
28 dbms_output.put_line('Killed '||fCnt);
29 end;
30 /
31
32 [[Скачать файл>>https://xwiki.una.md/bin/download/UNA/Kill_session_SQL/KillHungSessions.sql]] SQL