Получить sql запрос с именем машины - PullRequest
0 голосов
/ 04 августа 2020

Я хочу получить sql запрос с именем машины, где запрос sql был запущен, и имя машины может принадлежать любому пользователю. Пожалуйста, расскажите, как это можно получить, объединив такие таблицы, как DBA_hist_ sql, или любую другую таблицу.

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

Вы можете присоединиться к DBA_HIST_ACTIVE_SESS_HISTORY и DBA_HIST_SQLTEXT, если sql был записан в репозиторий рабочей нагрузки.

В DBA_HIST_ACTIVE_SESS_HISTORY у вас есть поле MACHINE, в котором вы получил значение SYS_CONTEXT('userenv','host').

Вы можете объединить оба представления по sql_id.

Однако запрос не будет зарегистрирован в репозитории рабочей нагрузки, если он не имеет смысла. Вы можете изменить это поведение, изменив настройки AWR, используя DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS

Пример

    select 
    distinct s.sql_id,
    s.sql_text,
    d.machine ,
    u.username ,
    d.program
from 
    gv$sql s inner join dba_hist_active_sess_history d  
     on (  d.sql_id = s.sql_id  and S.INST_ID = D.INSTANCE_NUMBER )
                inner join  dba_users u on (  D.USER_ID = U.USER_ID  )
where
     u.username = '&1' 
     S.SQL_ID = '&2' 
 order by D.SAMPLE_TIME desc 

Вы можете применить фильтр по имени пользователя или sql_id, или по обоим. имейте в виду, что поле USERNAME покажет вам пользователя Oracle, выполнившего запрос, а не пользователя операционной системы, стоящего за этим соединением.

0 голосов
/ 04 августа 2020

Могу предложить такой вариант

select 
    s.sql_id,
    s.sql_text,
    d.machine
from 
    v$sql s,
    dba_hist_active_sess_history d
where
    d.sql_id = s.sql_id    

Может быть, есть вариант получше или более связанный с вашим вопросом. Надеюсь, это будет вам полезно.

Я даю вам ссылки на документацию по этим представлениям.

DBA_HIST_ACTIVE_SESS_HISTORY

V $ SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...