AWR - как снять вручную

Снятие скриптом

При отсутствии Enterprise Manager можно легко снять AWR отчеты. Всё, что для этого понадобится — доступ к базе. Выполняем следующий запрос:

--Поиск DB_ID и всех точек
select * from DBA_HIST_SNAPSHOT d order by d.begin_interval_time desc

Из этого запроса мы узнаем ID базы и номер инстанса. Так же видим все последние снапшоты. Если надо выбрать отчет за какое-то время, можно воспользоваться существующими точками. Если же надо построить отчет по происходящему, создаем новые точки:

--создание новой точки
declare
v_num number;
begin
v_num := dbms_workload_repository.create_snapshot();
dbms_output.put_line(v_num);
end;

В результате выполнения этого кода получаем созданый снапшот. Результат — ID снапшота. Затем проводим нужные эксперименты и создаем еще один снапшот. Между ними и будем строить отчет. Для построения отчета используем следующий запрос:

select * from table (dbms_workload_repository.awr_report_html (/*db_id*/2388135020, /*INSTANCE_NUMBER*/1, /*SNAP_ID 1*/19427, /*SNAP_ID 2*/19428))

Копируем результат выполнения в файл с расширением html, счастье есть.

Снятие через функцию

Вариант через функцию(на выходе получаем CLOB, можем просматривать родным PL SQL DEVELOPERа просмотрщиком

--Функция создания AWR
create or replace function AWR_HTML(in_begin_point in number, in_end_point in number) return clob is
  ret_html clob;
  db_id number;
begin
  select dbid into db_id from v$database;
  for i in (
            select output
            from table(dbms_workload_repository.awr_report_html(db_id,  1, in_begin_point, in_end_point))
           )
  loop
    ret_html:=ret_html||i.output;
  end loop;
  return(ret_html);
end AWR_HTML;
select * from DBA_HIST_SNAPSHOT d order by d.begin_interval_time desc;
select awr_html(7031, 7033) from dual

Сохраняем сразу в HTML виде

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9