我有这个Java应用程序仍然通过JDBC代码与Oracle 11g通信。话虽如此,想要在Oracle历史记录中检查此应用程序的查询,如果已经存在的话。
要查看的关键项目:
?
),已通过java.sql.PreparedStatement
) 预期结果:
尝试使用下面的查询,但它不会返回上面列出的关键项:
select * from v$sql order by last_load_time desc
答案 0 :(得分:0)
正如其他成员已经指出的那样,V$SQL
,V$SQL_BIND_CAPTURE
和V$SQLAREA
应该为您提供大量有关Java应用程序触发的查询的信息。
请注意,它可能不是完整的时间顺序历史。假设Java应用程序对数据库进行了大量查询,则有可能并非所有查询都存在于V $ SQL中(例如:解析失败的查询,只使用一次不再存在于缓存中的查询等)可能会丢失出)。此外,如果查询被触发两次(使用相同或不同的绑定变量集),您将只在V$SQL
如果您的目标是以完美的时间顺序查找所有查询(作为某种类型的Java应用程序的黑盒研究),那么我建议您启用特定会话的跟踪(由SID, SERIAL#
在{{1}中标识}})。这将提供有关多个前端的信息,包括查询触发顺序,绑定变量,查询性能等。有关详细信息,请查看this链接。可以完成不同类型和级别的信息收集。此外,如果您计划在任何生产系统上使用它,请考虑其性能开销
答案 1 :(得分:0)
以下查询应返回您需要的信息
select vsql.sql_text, vses.SCHEMANAME, vsql.ELAPSED_TIME, vses.USERNAME
from v$session vses join v$sql vsql
on vses.sql_id=vsql.sql_id
where contdition;