## 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>
![](./image2021-1-29_9_42_45.png)
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