Начиная с 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
80600login-checkКто убил мою сессию?
