使用计算机名称获取SQL查询

时间:2020-08-04 12:05:21

标签: oracle

我想获取运行了sql查询且计算机名称可以属于任何用户的计算机名称的sql查询。请指导如何通过联接DBA_hist_sql之类的表或任何其他表来实现此目的。

2 个答案:

答案 0 :(得分:0)

我可以建议这样的变体

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

答案 1 :(得分:0)

只要已在工作负载存储库中捕获了sql,就可以加入DBA_HIST_ACTIVE_SESS_HISTORYDBA_HIST_SQLTEXT

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用户,而不是该连接背后的操作系统用户。