我正在尝试跟踪针对特定数据库用户执行的SQL语句。我没有启用AUDITING,我正在使用Oracle 11g。由会话执行的Oracle查询
我有以下查询:
SELECT
S.MODULE,
SQL_TEXT ,
S.EXECUTIONS
FROM
SYS.V_$SQL S,
SYS.ALL_USERS U
WHERE
S.PARSING_USER_ID=U.USER_ID
AND UPPER(U.USERNAME) IN ('USERNAME')
AND (UPPER(s.MODULE)='APP.EXE')
ORDER BY S.LAST_LOAD_TIME
但如果运行“APP.EXE”多个用户连接到同一个数据库用户,我无法理解这OS用户执行该查询。所以我尝试加入V $ SESSION视图来获取用户详细信息。
SELECT
S.MODULE,SQL_TEXT ,SN.OSUSER, SN.MACHINE, S.EXECUTIONS
FROM
SYS.V_$SQL S,
SYS.ALL_USERS U,
V$SESSION SN
WHERE
S.PARSING_USER_ID=U.USER_ID
AND UPPER(U.USERNAME) IN ('USERNAME')
AND (UPPER(S.MODULE)='APP.EXE')
AND S.SQL_ID=SN.SQL_ID
ORDER BY S.LAST_LOAD_TIME
但这并不似乎是工作(在我的情况下,它没有返回任何行) 所以,我有以下几个问题
1)我如何查询通过执行每场会议?
2)V_ $ SQL的EXECUTIONS列似乎来自所有会话的执行。如何知道会话执行特定查询的次数?
3)有关查询的记录将存储在V_ $ SQL中多久? Oracle何时从视图中删除它?
感谢你的所有提前,
普拉迪普
请注意,'prev_sql_id'可能不会像我们所期望的那样保存最后一个sql,而是看到插入到与该id相关联的'SYS.AUD $'中。 – YoYo 2017-03-14 23:33:07