我正在嘗試跟蹤針對特定數據庫用戶執行的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