我想获取运行了sql查询且计算机名称可以属于任何用户的计算机名称的sql查询。请指导如何通过联接DBA_hist_sql之类的表或任何其他表来实现此目的。
答案 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
也许有更好的变体或与您的问题有关。希望对您有帮助。
我让您链接这些视图的文档。
答案 1 :(得分:0)
只要已在工作负载存储库中捕获了sql,就可以加入DBA_HIST_ACTIVE_SESS_HISTORY
和DBA_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用户,而不是该连接背后的操作系统用户。