用于多个查询的SQL Monitor报告

时间:2015-08-20 13:54:08

标签: sql oracle sqlplus rdbms

我需要按顺序为查询集生成report_sql_monitor,并将其转换为文件。 所以我有以下内容:

  1. 查询所在的文件(例如test.sql)
  2. 假脱机文件(例如output.txt)
  3.   

    Test.sql / 以下是更正后的版本

       set pagesize 1000
       set echo off
       set feedback on
       set timing on
       set autotrace on stat
       define file=./output.txt
       define file
       col prev_sql_id new_value SQLID --get the SQL_ID of previous query to put it further into report_sql_monitor
       select /*+ Monitor */ name, last_name from family --first query 
       /
       select prev_id from v$session where sid = sys_context('USERENV','SID') --get SQL_ID
        /
        spool &file
        select dbms_sqltune.report_sql_monitor(
        sql_id => '&SQLID',
        type = > 'TEXT',
        report_level => 'ALL') as report from dual --Report was generated
        /
        spool off --close spooling 
        --the second query
        select /*+ Monitor */ salary,month from salary
        /
        select prev_sql_id from v$session where sid =sys_context('USERENV','SID') --get SQL_ID
        /
        spool &file append
        select dbms_sqltune.report_sql_monitor(
        sql_id => '&SQLID',
        type = > 'TEXT',
        report_level => 'ALL') as report from dual -- REPORT IS NOT GENERATED
        /
        spool off
    
      

    问题是上面的test.sql只为第一个带有'statistics'的查询生成report_sql_monitor报告。生成的文件(output.txt)应具有以下内容:

    1. test.sql中的每个查询的SQL监控报告 - NOT DONE
    2. 在SQL监控报告之后,应该有标准的查询统计数据 - IS DONE
    3. 统计

      xx recursive call
      
      xx db block gets
      
      xx consistent gets
      
      xx physical reads
      
      and so forth
      

1 个答案:

答案 0 :(得分:1)

来自manual

  

SQL语句运行时会自动启动SQL监视   并行或消耗至少5秒的CPU或I / O.   时间。

添加MONITOR提示以强制监控语句:

-verbose

监测数据也可能因以下原因而丢失,但我怀疑它们适用于此:

  1. 数据老化,通常在几十分钟之内。
  2. 阻止大型,奇怪的陈述被监控的错误。
  3. 控制监控行为的隐藏参数。