特定のデータベース ユーザーに対して実行された SQL ステートメントをトレースしようとしています。AUDITING を有効にしておらず、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' を実行している複数のユーザーが同じ db ユーザーに接続されている場合、どの 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 に保存される期間は? オラクルはいつそれをビューから削除しますか?
よろしくお願いします。
プラディープ