通过dbms_workload_repository.awr_report_html产生awr报告

2026-06-12Oracle / 性能优化

生成awr报告的方法有很多,常用有通过em,toad,awrrpt.sql.通过em,比较方便,鼠标点点就行了,但需在服务端开启em.通过toad,比较方便,但有些人不习惯使用toad.通过awrrpt.sql,需要手动执行,

而且生成的报告放在服务端.其实比较方便又简单的方法是使用dbms_workload_repository包的awr_report_html函数.

以下一个单实例生成awr报告的示例:

declare

v_begin_date date;

v_end_date date;

v_dbid number;

v_instance_number number;

v_min_snap_id number;

v_max_snap_id number;

begin

–设置要生成的报告的开始时间和结束时间

v_begin_date:=to_date('20150828 0530','yyyymmdd hh24mi');

v_end_date:=to_date('20150828 1130','yyyymmdd hh24mi');

–根据时间找到snap_id

select dbid,instance_number,min(snap_id),max(snap_id) into v_dbid,v_instance_number,v_min_snap_id,v_max_snap_id from dba_hist_snapshot

where end_interval_time>v_begin_date and end_interval_time<v_end_date

group by dbid,instance_number;

–加大dbms_output的buffer防止overflow

dbms_output.enable(500000);

–输出html文本

for i in (select output from table(dbms_workload_repository.awr_report_html(v_dbid, v_instance_number,v_min_snap_id,v_max_snap_id)))

loop

dbms_output.put_line(i.output);
end loop; 

end;

这里是用pl/sql develper执行的,所以把输出的结果复制到一个文本文件,改为html扩展名既可.如果用sqlplus可以直接通过spool把结果输出到一个html文件.

**

备注:**

dbms_workload_repository包不仅可以生成awr报告,还可以创建删除快照,修改快照设置,创建删除基线,生成ash报告等.

其它工具也是通过对这个包的调用来实现相关awr操作.