2016-12-27 71 views
0

我有这个Java应用程序仍然通过JDBC代码与Oracle 11g进行通信。据说,如果已经存在,想检查这个应用程序对Oracle历史记录的查询。Oracle查询历史

关键项目看

  1. 全面查询(用参数值(解析,而不是?),通过java.sql.PreparedStatement通过)
  2. 查询
  3. 架构使用
  4. 的时间
  5. 用户发起查询

预期结果:

  • SQL查询通过SQL Developer中运行(与SYSDBA权限或没有)与密钥的所有关键项目使用下面的查询返回

尝试,但它不返回上面列出的关键项目:

select * from v$sql order by last_load_time desc 
+0

看在V $ SQL_BIND_CAPTURE信息,和V $ SQLAREA – OldProgrammer

+0

你可以查询oracle的历史视图。查询v $ active_session_history:这需要大约1个数据。对于更长时间的数据查询dba_hist_active_sess_history。 sql文本在dba_hist_sql_text上。对于绑定变量,dba_hist_sqlbind也会有所帮助。 –

+0

任何快捷方式?或确切的查询来看看? –

回答

0

其他成员ha我们已经指出,V$SQL,V$SQL_BIND_CAPTUREV$SQLAREA应该会给你提供很多Java应用程序所发射查询的信息。

请注意,它可能不是完整的年代史。假设Java应用程序对数据库进行大量查询,有可能并非所有查询都存在于V $ SQL中(例如:解析失败的查询,仅用于一次不再处于缓存中的查询等)可能会丢失出)。此外,如果查询被激发两次(具有相同或不同的一组绑定变量),您将只能找到最新的执行条目V$SQL

如果您的目标是以完美的时间顺序查找所有查询(如某种黑色然后我建议您启用特定会话的跟踪(由SID, SERIAL#V$SESSION中标识)。这将提供多个方面的信息,包括查询火灾顺序,绑定变量,查询性能等。请参阅this链接以获取更多信息。可以完成不同类型和级别的信息收集。此外,它的性能开销,请考虑因素,如果你打算使用它在任何生产系统下面

+0

感谢您的信息,但没有想到会有多复杂的事情。但不能接受这个答案,因为它没有足够的内容**期望结果** –

+0

没有问题,很高兴如果这个信息可以指出你在正确的方向或帮助解决你的问题。我的意图是指出,V $ SQL可能不包含您正在寻找的所有答案。 –

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; 
+0

不满足项目#1,不返回完整的SQL语句。不能使用'SQL_FULLTEXT'列,因为它不会转换通过'java.sql.PreparedStatement'传递的参数来处理'java.sql.ResultSet'。 –

+0

此外,您是否可以在上面的SQL查询中列出要列入的关键项目,并指出要放置在“condition”上的参数。 –