## AWR - как снять вручную #### Снятие скриптом При отсутствии Enterprise Manager можно легко снять AWR отчеты. Всё, что для этого понадобится — доступ к базе. Выполняем следующий запрос: ```oraclesql= --Поиск DB_ID и всех точек select * from DBA_HIST_SNAPSHOT d order by d.begin_interval_time desc ``` Из этого запроса мы узнаем ID базы и номер инстанса. Так же видим все последние снапшоты. Если надо выбрать отчет за какое-то время, можно воспользоваться существующими точками. Если же надо построить отчет по происходящему, создаем новые точки: ```oraclesql= --создание новой точки declare v_num number; begin v_num := dbms_workload_repository.create_snapshot(); dbms_output.put_line(v_num); end; ``` В результате выполнения этого кода получаем созданый снапшот. Результат — ID снапшота. Затем проводим нужные эксперименты и создаем еще один снапшот. Между ними и будем строить отчет. Для построения отчета используем следующий запрос: ```oraclesql= 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а просмотрщиком ```oraclesql= --Функция создания 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; ``` ```oraclesql= select * from DBA_HIST_SNAPSHOT d order by d.begin_interval_time desc; select awr_html(7031, 7033) from dual ``` Сохраняем сразу в HTML виде:<br> 