Вбити мертву сесію, oracle dba

Вбити мертву сесію

Часто буває так, що втрачено з'єднання сервера з клієнтом. В цьому випадку, якщо сесія перебувала в статусі «ACTIVE», настане момент, коли серверного процесу потрібно буде звернутися до клієнта. І якщо зв'язку з ним не буде, то серверний процес завершується, а фоновий процес PMON очистить займані ресурси. А якщо сесія була в стані 'INACTIVE'? Або сеанс «завис» з якоїсь причини і блокування, які він утримує, заважають працювати іншим клієнтам? Або тайм-аути firewall / router / switch заважають жити з'єднанню клієнта з сервером?

В цьому випадку перше, що можна пробувати виконувати:

ALTER SYSTEM KILL SESSION 'sid, serial #';

ALTER SYSTEM DISCONNECT SESSION 'sid, serial #' IMMEDIATE;

Часто буває так, що втрачено з'єднання сервера з клієнтом.

В цьому випадку, якщо сесія перебувала в статусі «ACTIVE», настане момент,

коли серверного процесу потрібно буде звернутися до клієнта. І якщо зв'язку

з ним не буде, то серверний процес завершується, а фоновий процес

PMON очистить займані ресурси. А якщо сесія була в стані

'INACTIVE'? Або сеанс «завис» з якоїсь причини і блокування, які він

утримує, заважають працювати іншим клієнтам?

Або тайм-аути firewall / router / switch заважають жити з'єднанню клієнта з

В цьому випадку перше, що можна пробувати виконувати:

Де значення sid і serial # можна почерпнути з

Але нажаль! Часто буває так, що сесія набуває

після цього статус 'KILLED' (process = 'PSEUDO') і

позбутися від цієї сесії вдається лише після

перезавантаження. А якщо це не можливо?

Тоді пробуйте наступний варіант:

  • Визначимося з нашим мертвим процесом за допомогою

наступного запиту: SELECT p.spid FROM v $ session s,

v $ process p WHERE s.paddr = p.addr;

  • Якщо вдалося знайти наш мертвий процес, то видаляємо

його засобами операційної системи. Для LINUX це

реалізується командою KILL -9 spid.

Але і в цьому випадку є підводні камені, наприклад,

не у всіх операційних системах вдається очистити

пам'ять після таких маніпуляцій.

Є ще варіант:

Спробуйте в sqlnet.ora на сервері

встановити параметр SQLNET.EXPIRE_TIME

(Значення в хвилинах).

Схожі статті