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

时间:2015-06-18 23:00:38

标签: sql oracle oracle11g

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

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

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

2 个答案:

答案 0 :(得分:1)

  

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

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

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

Find out more

答案 1 :(得分:0)

最后,我使用Justin Cave建议并使用Oracle JDBC驱动程序来收集Set中的每个已执行查询,并在运行测试后将它们全部转储到文件中。