2014-09-12 2 views
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' 
+0

이 쿼리가 작동합니까? 어떤 문제가 있습니까? – zaratustra

+0

내가 위에서 설명한대로 사용자가 moudiz를 알고 싶습니다. 어떤 쿼리를 실행하고 있습니까 – Moudiz

답변

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'; 
+0

SQL과 sqlarea의 차이점은 무엇입니까? @jens – Moudiz

+0

v $ 뷰 중 많은 부분이 내용에서 다소 겹치는 것처럼 보입니다. 나는 다른 관점을 추측한다. –

+0

V $ sqlarea는 v $ sql의 집계입니다. 더 많은 정보는 뷰의 기본 쿼리에서 볼 수 있습니다. –

1

:

이 모든 현재 열려있는 커서가 표시됩니다.

브이 $ SQL 세부 - 여러 쿼리의 복사본이있는 경우 :

"T SELECT * FROM"공유 풀에

을, 브이 $ SQL 쿼리 당 행을해야합니다. 이는 사용자 U1과 사용자 U2가 모두 테이블 T를 가지고 있고 둘 다 "select * from T"를 발행 할 때 발생할 수 있습니다. 그것들은 전혀 다른 계획을 가진 다른 쿼리들입니다. v $ sql에는 2 행이 있습니다.

v $ sqlarea는 v $ sql의 집계입니다. DISTINCT sql을 선택합니다. "select * from T"는 으로 표시됩니다.

톰이 여기에 응답했습니다. https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::p11_question_id:385254862843

관련 문제