利用Windows批处理让ORACLE自动生成每日AWR报告
AWR报告是Oracle调优的重要信息来源,一般在测试、调优时候根据情况调阅。根据网络上各位前辈的分享,根据自己情况整理、测试,最后依照下面步骤,利用windows计划任务,在每天凌晨自动生成前一天的awr报告。
需要三个文件,我将三个文件放在了“C:\AWR\”目录下
awr.cmd,也就是批处理文件,在计划任务中调用。文件内容是在cmd启动sqlplus,执行生成awr报告的语句。
awr.sql,在awr.cmd中调用,这个文件主要是生成我们需要检测的时间段。然后作为变量传给下一个文件。
mqney_awr.sql,生成awr报告的主要文件,从awr.sql接收时间,生成awr报告到指定的目录下。
下面是三个文件的内容。
批处理文件awr.cmd的内容
cmd.exe /c sqlplus xxxf1/xxxf@ORCL @C:\AWR\awr.sql
注:xxxf1为账号,xxxf为密码,ORCL为实例,“@C:\AWR\awr.sql”意思是调用C盘AWR目录下的awr.sql文件。
下面再来看看awr.sql的内容
@@C:\AWR\mqney_awr.sql 0 8
@@C:\AWR\mqney_awr.sql 8 10
@@C:\AWR\mqney_awr.sql 10 12
@@C:\AWR\mqney_awr.sql 12 14
@@C:\AWR\mqney_awr.sql 14 16
@@C:\AWR\mqney_awr.sql 16 18
@@C:\AWR\mqney_awr.sql 20 24
exit
注:“@@C:\AWR\mqney_awr.sql 0 8”的意思是把0点作为开始,8点作为结束时间,传两个参数调用C盘AWR目录下的mqney_awr.sql。结尾的exit会让批处理跳出sqlplus。
最后是mqney_awr.sql内容
set echo off;
set veri off;
set feedback off;
set termout on;
set heading off;
set linesize 500;
variable dbid number;
variable inst_num number;
variable bid number;
variable eid number;
variable bhour number;
variable ehour number;
begin
:bhour := &1;
:ehour := &2;
end;
/
begin
select min(t.snap_id) + :bhour - 1 into :bid from sys.dba_hist_snapshot t where to_char(t.begin_interval_time,'yyyy-mm-dd') = to_char(sysdate-1,'yyyy-mm-dd');
select min(t.snap_id) + :ehour - 1 into :eid from sys.dba_hist_snapshot t where to_char(t.begin_interval_time,'yyyy-mm-dd') = to_char(sysdate-1,'yyyy-mm-dd');
select dbid into :dbid from v$database;
select instance_number into :inst_num from v$instance;
end;
/
set termout off;
column report_name new_value report_name noprint;
select 'C:\AWR\mqney_awrrpt_'||to_char(sysdate,'yyyymmddhh24MMss')||'_for_'||to_char(sysdate-1,'yyyymmdd')||'_'||:bhour||'-'||:ehour||'.html' report_name from dual;
set termout on;
spool &report_name;
select output from table(dbms_workload_repository.awr_report_html(:dbid,:inst_num,:bid,:eid,0 ));
spool off;
set termout on;
clear columns sql;
ttitle off;
btitle off;
repfooter off;
undefine report_name
注:根据传入的时间参数,向C盘AWR文件夹写Html格式的报告。文件用mqney_awrrpt时间戳.html命名。
最后是批处理,这个大家都知道