Можно ли узнать кто отправил запрос на выполнение?

Нашел нужный запрос:

SELECT s.*
  FROM v$sql s 
 WHERE SQL_TEXT like '%BLABLA%';

Как узнать какой ОС пользователь его отправил на выполнение?


Ответы (1 шт):

Автор решения: 0xdb

Нет, в общем случае, достоверно это узнать невозможно.

Чтобы отследить выполнение запросов на уровне конкретного пользователя БД, необходимо включить аудит. Начать знакомвство можно с главы Monitoring Database Activity with Auditing оф. документации.

Если 100% достоверности не требуется, то можно узнать, какие сессии активны с пользователем БД, который распарсил SQL запрос, т.е. с большой долей вероятности первым послал запрос на выполнение. Но, понятно, что под одним пользователем БД могут подключится несколько ОС пользователей:

select /*BLABLA*/ * from dual;

select 
    q.first_load_time, q.parsing_user_id, s.sid, osuser, machine, process
from v$sql q, v$session s, v$process p
where regexp_like (q.sql_text, '\/\*BLABLA')
and user#=parsing_user_id
and p.addr=s.paddr;

FIRST_LOAD_TIME     PARSING_USER_ID        SID OSUSER MACHINE  PROCESS 
------------------- --------------- ---------- ------ -------- --------
2021-11-06/12:26:13             110         48 oracle dbsrv    30465   
2021-11-06/12:26:13             110        311 me     clnt123  4176    
→ Ссылка