Ненужные сессии.

При сбоях в операционке на стороне клиента или его некорректных действиях, на стороне сервера зачастую остаются подвисшие сессии. Они могут фигурировать с пометкой 'killled' или без неё. Зачастую такие сессии могут висеть достаточно долго. Со стороны Oracle их можно убить таким запросом:

ALTER SYSTEM KILL SESSION :sid, :serial#;

Вычислить такие сессии, а заодно и сгенерить запросы на убитие можно так:

select 'ALTER SYSTEM KILL SESSION ''' || sid || ', ' || serial# || '''; --'||username
  from v$session
 where last_call_et > 3600
   and status = 'INACTIVE' 
   and not exists (select 1 from v$lock where v$lock.sid = v$session.sid);

Хотя этот запрос фактически выдаёт сессии в которых не было активности более часа и которые не имеют блокировку каких либо объектов. Написав эти строки, я запустил этот запрос на своей базе - он выдал больше 70-ти строк :) Причём на некоторых сессиях активности не было больше 5-ти часов - люди создают видимость своей работы, запустили приложение и полезли в интернет :)

То есть убивать сессии на основе этого скрипта нужно очень осторожно тут будет много нормальных сессий. Хотя для экстренной ситуации (когда нужно убрать сессии всех бездельников) - вполне подойдёт :)

Поcле выполнения ALTER SYSTEM KILL SESSION ... сессия может висеть достаточно долго со статусом "killed". Вычисляем в Oracle, пропускаем в Windows (или kill -9 в Linux)..

SELECT 'HOST orakill ' || i.instance_name || ' ' || p.spid
  FROM v$process p, v$session s, v$instance i
 WHERE p.addr = s.paddr AND s.status = 'KILLED';

Иногда сессия уже бывает убита в Oracle (информации о нём в v$session уже нет), но процесс в операционке ещё остается. Такие сессии можно и нужно прибивать со стороны операционки (в случае Linux/Unix):

select 'kill -9 ' || spid from v$process
 where not exists (SELECT 1 FROM v$session WHERE paddr = addr)
   and serial#>1;

Для предотвращения подобных проблем желательно поставить параметр SQLNET.EXPIRE_TIME=10 в sqlnet.ora.

В этом случае каждые 10сек будут проверяться все сессии на живые/неживые автоматически.

 

 

 

 

Хостинг от uCoz