我正在尝试加入两个表v $ sql和v $ session 我的这个查询的目的是知道谁是使用该机器的用户以及他使用的sql是什么。
我正在寻找类似的东西
select s.sql_text
, i.osuser
from v$sql s
, v$session i
where i.something= s.something
and i.osuer='MOUDIZ'
答案 0 :(得分:1)
我看到你对这两种观点之间的区别提出了一个悬而未决的问题。
v $ sql详细信息 - 如果您有多个查询副本:
"从T"中选择*
在共享池中,v $ sql每个查询都有一行。如果用户U1和 用户U2都有一个表T,并且发出"从T"中选择*。那些完全是 具有不同计划的不同查询等。 v $ sql将有2行。
v $ sqlarea是v $ sql的聚合。它选择了DISTINCT sql。 "从T"中选择*将 出现在那里。
Tom在这里回答https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::p11_question_id:385254862843
答案 1 :(得分:0)
select s.USERNAME,
a.SQL_TEXT
from v$session s
join v$sqlarea a on ( a.ADDRESS = s.SQL_ADDRESS )
where s.OSUSER = 'MOUDIZ'
它只会显示用户现在正在做什么。
这将显示所有当前打开的游标:
select s.username, cast(substr(q.SQL_FULLTEXT,1,4000) as varchar2(4000)) sql_text
from v$session s
join v$open_cursor c on ( s.SADDR = c.SADDR )
join v$sql q on ( q.SQL_ID = c.SQL_ID )
and s.OSUSER = 'MOUDIZ';