如何在Oracle数据库中查看哪些用户在执行哪些SQL

对于DBA来说,这是一个非常常见的问题,DBA需要找出以下问题:

1、哪些用户在跑哪些SQL?

2、一个特定的SQL是被哪个用户在执行?

3、一个特定的用户在跑哪些SQL?

从这些问题中可以很明显的看出来,这些问题都是指当前,此刻发生的。事实上,还可以获得更多类似的内容:

1、当前登录数据库的有哪些用户?

2、哪些计算机在被用户登录?

3、一个SQL跑了多久了?

所有以上这些问题都对你的数据库性能调优有关。在ORACLE数据库中可能存在性能低下的SQL语句,这时候你就需要识别用户,SQLs,以便来解决这些性能低下的SQL.

所有这些信息都在以v$开头的表中。比如v$session和v$sqlarea。

如果你有以上2个表的权限,可以执行以下语句:

SELECT
SUBSTR(SS.USERNAME,1,8) USERNAME,
SS.OSUSER "USER",
AR.MODULE || ' @ ' || SS.machine CLIENT,
SS.PROCESS PID,
TO_CHAR(AR.LAST_LOAD_TIME, 'DD-Mon HH24:MM:SS') LOAD_TIME,
AR.DISK_READS DISK_READS,
AR.BUFFER_GETS BUFFER_GETS,
SUBSTR(SS.LOCKWAIT,1,10) LOCKWAIT,
W.EVENT EVENT,
SS.status,
AR.SQL_fullTEXT SQL
FROM V$SESSION_WAIT W,
V$SQLAREA AR,
V$SESSION SS,
v$timer T
WHERE SS.SQL_ADDRESS = AR.ADDRESS
AND SS.SQL_HASH_VALUE = AR.HASH_VALUE
AND SS.SID = w.SID (+)
AND ss.STATUS = 'ACTIVE'
AND W.EVENT != 'client message'
ORDER BY  SS.LOCKWAIT ASC, SS.USERNAME, AR.DISK_READS DESC

通过该语句,可以得到你想要的信息,截图如下:

如何在Oracle数据库中查看哪些用户在执行哪些SQL

我的公众号:

如何在Oracle数据库中查看哪些用户在执行哪些SQL

上一篇:Oracle中,如何将String插入到BLOB类型字段


下一篇:Oracle数据库中的blob类型解析