Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取在Oracle中过去几个小时内执行的所有sql查询_Sql_Oracle_Oracle11g - Fatal编程技术网

获取在Oracle中过去几个小时内执行的所有sql查询

获取在Oracle中过去几个小时内执行的所有sql查询,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我需要一种方法来收集过去几个小时内在Oracle DB(Oracle Database 11g)中执行的所有查询,而不管查询的速度有多快(这将用于在对具有多个执行查询点的应用程序运行测试后计算sql覆盖率) 我不能使用像V$SQL这样的表,因为不能保证查询会在那里停留足够长的时间。看起来我可以使用DBA_HIST_SQLTEXT,但我没有找到一种方法来过滤在当前测试运行之前执行的查询 所以我的问题是:我可以使用什么表来获得在给定时间段(最多2小时)内执行的所有查询,我应该调整什么数据库配置来达到

我需要一种方法来收集过去几个小时内在Oracle DB(Oracle Database 11g)中执行的所有查询,而不管查询的速度有多快(这将用于在对具有多个执行查询点的应用程序运行测试后计算sql覆盖率)

我不能使用像V$SQL这样的表,因为不能保证查询会在那里停留足够长的时间。看起来我可以使用DBA_HIST_SQLTEXT,但我没有找到一种方法来过滤在当前测试运行之前执行的查询

所以我的问题是:我可以使用什么表来获得在给定时间段(最多2小时)内执行的所有查询,我应该调整什么数据库配置来达到我的目标


“我需要查询本身,因为我需要了解在测试期间执行应用程序中编码的所有查询中的哪些查询”

捕获所有执行查询的最简单方法是对所有数据库表启用细粒度审计。您可以使用数据字典在每个应用程序表上生成策略

请注意,即使在写入OS文件时,这样多的策略也会对数据库产生很大影响,并会增加运行测试所需的时间。因此,您应该只使用这些策略来评估您的测试覆盖率,并在其他测试运行中禁用它们


.

最后,我使用了建议的、经过检测的Oracle JDBC驱动程序,收集集合中执行的每个查询,并在运行测试后将它们全部转储到一个文件中。

您可能不能。Oracle不会存储曾经发出的每个
select
查询的历史记录。我想您可以在时间段开始时启用对所有会话的跟踪,然后稍后解析跟踪文件。但是,这会使数据库速度非常慢,而且生成的跟踪文件会非常大和笨拙。这似乎要容易得多,尤其是因为这是一项测试工作,用你的代码来记录这些信息。我的这种需求的出发点是查看AWR以找出哪些数据可用,然后构建我自己的查询以满足我的需要(如果AWR不足够)。在您的情况下,我会每小时查看一次运行快照,然后在最后七个小时运行您的报告。我认为甲骨文内部的AWR将是最准确的手段。还可以查看此列表中的表:“从dict中选择*表名,如“DBA\U HIST%”或表名,如“V$%HIST%”。最棘手的事情是理解这些表中的统计数据是累积的。您是否真的需要SQL语句,或者运行的语句类型、由谁运行、针对哪些对象等就足够了?后者可以使用标准日志记录(但不是SQL语句本身)。我需要查询本身,因为我需要了解在测试期间执行应用程序中编码的所有查询中的哪些查询。设置细粒度审核。有关信息,请参阅
dbms\u fga
软件包。