使用specificiq条件在v $ sql和v $ session之间进行连接

时间:2014-09-12 12:20:24

标签: sql oracle data-dictionary

我正在尝试加入两个表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'

2 个答案:

答案 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';