Wiki source code of SQL скрипт для прерывания сессий
Last modified by Александр Таболин on 2023/07/24 18:25
Show last authors
| author | version | line-number | content |
|---|---|---|---|
| 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 |