Oracle 查询历史记录

问题描述 投票:0回答:2

我的这个 Java 应用程序仍在通过 JDBC 代码与 Oracle 11g 进行通信。话虽如此,想要检查该应用程序对 Oracle 历史记录的查询(如果已经存在)。

要查看的关键项目

  1. 完整查询(带有参数值(已解析而不是
    ?
    ),通过
    java.sql.PreparedStatement
    传递)
  2. 查询时间
  3. 使用的架构
  4. 用户发起查询

预期结果:

  • 通过 SQL Developer(无论是否具有 SYSDBA 权限)运行 SQL 查询,并返回所有关键项的密钥

尝试使用下面的查询,但它没有返回上面列出的关键项目:

select * from v$sql order by last_load_time desc
sql oracle jdbc oracle11g
2个回答
0
投票

正如其他成员已经指出的那样,

V$SQL
V$SQL_BIND_CAPTURE
V$SQLAREA
应该为您提供关于 Java 应用程序触发的查询的大量信息。

请注意,这可能不是完整的时间历史。假设 Java 应用程序对数据库进行大量查询,则可能并非所有查询都存在于 V$SQL 中(例如:解析失败的查询、仅使用一次且不再在缓存中的查询等)可能会被遗漏出去)。此外,如果查询被触发两次(使用相同或不同的绑定变量集),您将在

V$SQL

中仅找到最新的执行条目

如果您的目标是按完美的时间顺序查找所有查询(作为 Java 应用程序的某种黑盒研究),那么我建议您启用特定会话的跟踪(由

SID, SERIAL#
中的
V$SESSION
标识)。这将提供多个方面的信息,包括查询触发顺序、绑定变量、查询性能等。请查看this链接以获取更多信息。可以进行不同类型和级别的信息收集。另外,它的性能开销,如果您计划在任何生产系统上使用它,请考虑这个因素


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;
© www.soinside.com 2019 - 2024. All rights reserved.