Заметка

Кто убил мою сессию?

Начиная с 12с Оракл пишет инициатора события по убийству сессий в алертлог. Собственно мы можем воспользоваться этим и найти того, кто убил сессию. Посмотрим алертлог, в примере за последние 5 минут

SELECT indx,
       cast(t.ORIGINATING_TIMESTAMP as date) dt,
       message_type tp,
       message_level lvl,
       message_text txt
FROM   v$diag_alert_ext t
where  ORIGINATING_TIMESTAMP>sysdate-1/24/60*5
 ;

В алертлоге записи об убийстве сессий выглядят примерно следующим образом:

KILL SESSION for sid=(7877, 58164):
  Reason = alter system kill session
  Mode = KILL HARD SAFE -/-/-
  Requestor = USER (orapid = 1447, ospid = 293827, inst = 1)
  Owner = Process: USER (orapid = 929, ospid = 842259)
  Result = ORA-31

Для версий Оракла ниже 12 — запись не будет содержать информации о том, кто запросил убийство.

Вот так выглядит в алерте убийство сессий для Оракла 11.2

Mon Sep 27 16:01:02 2021
Immediate Kill Session#: 455, Serial#: 36507
Immediate Kill Session: sess: 0x18b2064308 OS pid: 15370
Mon Sep 27 16:01:12 2021
Immediate Kill Session#: 3420, Serial#: 5105
Immediate Kill Session: sess: 0x1952573288 OS pid: 24239

Где

  • Requestor — запрашивающий, кто запросил kill сессии(инициатор)
  • Owner — владелец или тот, кого убили
  • sid=(7877, 58164) — sid и serial сессии, которую убивали
  • ospid — идентификатор процесса в операционной системе(v$process.SPID)
  • orapid — идентификатор процесса в оракле(v$process.PID)

Имея эти данные можно в режиме он-лайн попробовать запросить их из v$process, если процесс еще не завершился

SELECT p.pid,p.spid,s.sid,s.serial#,s.status,s.username,s.osuser,s.machine,s.terminal,s.program,s.module,s.action
FROM   v$process p left join v$session s on s.paddr=p.addr where spid = 293827;
Кто убил мою сессию?
audit create session;

В этом случае необходимо искать по идентификатору процесса в операционной системе (SPID).

SELECT os_username, username, userhost, terminal, timestamp,
       action_name, sessionid, returncode,os_process
FROM dba_audit_session where os_process = 293827
Кто убил мою сессию?

Как можно отблагодарить:

  • Оформить удобную для вас подписку на Boosty.to
  • Разово поддержать через DonationAlerts
8060login-checkКто убил мою сессию?

Добавить комментарий