这个Java应用程序仍然通过JDBC代码与Oracle 11g通信。尽管如此,如果该查询已经存在,则希望检查Oracle历史记录上对此应用程序所做的查询。
查看关键项的
?
**),完整查询(带有参数值(已解析而非)通过** java.sql.PreparedStatement
**)**预期结果:
尝试使用下面的查询,但它没有返回上面列出的关键项:
select * from v$sql order by last_load_time desc
发布于 2016-12-27 05:56:38
正如其他成员已经指出的那样,V$SQL
、V$SQL_BIND_CAPTURE
和V$SQLAREA
应该为您提供大量由Java触发的查询的信息。
请注意,这可能不是完整的年代史。假设Java应用程序对数据库进行了大量的查询,可能并不是所有的查询都存在于V$SQL中(例如:解析失败的查询、只使用过一次而不再缓存的查询等等)。此外,如果查询被触发两次(使用相同或不同的绑定变量集),您将只在V$SQL
中找到最新的执行项。
如果您的目标是以完美的时间顺序查找所有查询(作为对Java应用程序的某种黑匣子研究),那么我建议您启用对特定会话的跟踪(由SID, SERIAL#
在V$SESSION
中标识)。这将提供多个方面的信息,包括查询火顺序、绑定变量、查询的性能等。有关更多信息,请查看这链接。可以进行不同类型和级别的信息收集。此外,它的性能开销,如果您计划在任何生产系统上使用它,请考虑这个因素。
发布于 2016-12-27 07:24:25
下面的查询应该返回您需要的信息
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;
https://stackoverflow.com/questions/41338462
复制相似问题