我正在尝试跟踪针对特定数据库用户执行的 SQL 语句。我没有启用审计,我使用的是 Oracle 11g。
我有以下查询:
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”的多个用户连接到同一个数据库用户,我无法理解哪个操作系统用户执行了哪个查询。所以我尝试加入 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 什么时候从视图中删除它?
先谢谢大家了
普拉迪普