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 виде: