1

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

2 回答 2

1

我看到你对这两种观点之间的差异有一个悬而未决的问题。

v$sql 详细信息——如果您有多个查询副本:

“从 T 中选择 *”

在您的共享池中, v$sql 每个查询都会有一行。如果用户 U1 和用户 U2 都有一个表 T 并且都发出“select * from T”,则可能会发生这种情况。这些是具有不同计划的完全不同的查询等等。v$sql 将有 2 行。

v$sqlarea 是 v$sql 的聚合。它选择出 DISTINCT sql。“从 T 中选择 *”将出现在那里。

汤姆在这里回答了https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::p11_question_id:385254862843

于 2014-09-12T13:21:16.737 回答
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';
于 2014-09-12T12:24:45.890 回答