Showing posts with label AWR. Show all posts
Showing posts with label AWR. Show all posts

Wednesday, May 03, 2017

Multiple AWR reports with one hour break up

It seems strange, but sometimes Application support asks about AWR Reports on 1-2 days with one hour break up.

In this case it is useful  multiple_awr.sql script from
https://oracle-base.com/dba/script?category=10g&file=generate_multiple_awr_reports.sql

First to identify snap range for the date you can use the following:
set linesize 500
set head off
--col snap_id for a45
col begin_interval_time for a30
select snap_id,begin_interval_time,end_interval_time from dba_hist_snapshot
where trunc(begin_interval_time) = to_date('03/05/2017','DD/MM/YYYY')
order by snap_id;

and then use the multiple_awr.sql script replacing values of the: 
  l_snap_start       NUMBER := 7724;
  l_snap_end         NUMBER := 7730;

------- multiple_awr.sql ----------------------------------------------------------------------------

-- File Name    : http://www.oracle-base.com/dba/10g/generate_multiple_awr_reports.sql
-- Author       : DR Timothy S Hall
-- Description  : Generates AWR reports for all snapsots between the specified start and end point.
-- Requirements : Access to the v$ views, UTL_FILE and DBMS_WORKLOAD_REPOSITORY packages.
-- Call Syntax  : Create the directory with the appropriate path.
--                Adjust the start and end snapshots as required.
--                @generate_multiple_awr_reports.sql
-- Last Modified: 02/08/2007
-- -----------------------------------------------------------------------------------
CREATE OR REPLACE DIRECTORY awr_reports_dir AS '/tmp/awr';

DECLARE
  -- Adjust before use.
  l_snap_start       NUMBER := 7724;
  l_snap_end         NUMBER := 7730;
  l_dir              VARCHAR2(50) := 'AWR_REPORTS_DIR';

  l_last_snap        NUMBER := NULL;
  l_dbid             v$database.dbid%TYPE;
  l_instance_number  v$instance.instance_number%TYPE;
  l_file             UTL_FILE.file_type;
  l_file_name        VARCHAR(50);

BEGIN
  SELECT dbid
  INTO   l_dbid
  FROM   v$database;

  SELECT instance_number
  INTO   l_instance_number
  FROM   v$instance;

  FOR cur_snap IN (SELECT snap_id
                   FROM   dba_hist_snapshot
                   WHERE  instance_number = l_instance_number
                   AND    snap_id BETWEEN l_snap_start AND l_snap_end
                   ORDER BY snap_id)
  LOOP
    IF l_last_snap IS NOT NULL THEN
      l_file := UTL_FILE.fopen(l_dir, 'awr_' || l_last_snap || '_' || cur_snap.snap_id || '.htm', 'w', 32767);

      FOR cur_rep IN (SELECT output
                      FROM   TABLE(DBMS_WORKLOAD_REPOSITORY.awr_report_html(l_dbid, l_instance_number, l_last_snap, cur_snap.snap_id)))
      LOOP
        UTL_FILE.put_line(l_file, cur_rep.output);
      END LOOP;
      UTL_FILE.fclose(l_file);
    END IF;
    l_last_snap := cur_snap.snap_id;
  END LOOP;

EXCEPTION
  WHEN OTHERS THEN
    IF UTL_FILE.is_open(l_file) THEN
      UTL_FILE.fclose(l_file);
    END IF;
    RAISE;
END;
/
=============