自動生成awr報告指令碼

cnaning發表於2013-02-03
大家好!
 
我們知道awr報告每小時自動收集一次,但是不會自動產生awr報告,這裡Aning和大家分享一個自動生成awr報告的指令碼:
 
1.shell指令碼,report4.sh 這是每4小時生成一次awr報告的指令碼
 
#!/bin/bash
ORACLE_BASE=/u01/app/oracle
export ORACLE_BASE
ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export ORACLE_HOME
ORA_CRS_HOME=/u01/app/11.2.0/grid
export ORA_CRS_HOME
ORACLE_SID=rac1
export ORACLE_SID
PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORA_CRS_HOME/bin
export PATH
export ORACLE_UNQNAME=rac
datetime=`date  +%Y%m%d%H`
cd /home/oracle/hourly_backup
$ORACLE_HOME/bin/sqlplus /nolog<connect / as sysdba;
@/home/oracle/backup/script/awrrpt_rac1_4.sql
exit
!
/bin/gzip -9 /home/oracle/hourly_backup/report_$datetime.html
 
2.shell指令碼呼叫的生成awr報告的sql指令碼,awrrpt_rac1_4.sql
set echo off;
set veri off;
set feedback off;
set termout on;
set heading off;
variable rpt_options number;
define NO_OPTIONS = 0;
rem according to your needs, the value can be 'text' or 'html'
define report_type='html';
begin
:rpt_options := &NO_OPTIONS;
end;
/
variable dbid number;
variable inst_num number;
variable bid number;
variable eid number;
variable day number;
begin
select max(snap_id)-5 into :bid from dba_hist_snapshot;
select max(snap_id) into :eid from dba_hist_snapshot;
select dbid into :dbid from v$database;
select instance_number into :inst_num from v$instance;
select to_number(to_char(sysdate,'yyyymmddhh24')) into :day from dual;
end;
/
column ext new_value ext noprint
column fn_name new_value fn_name noprint;
column lnsz new_value lnsz noprint;
select 'txt' ext from dual where lower('&report_type') = 'text';
select 'html' ext from dual where lower('&report_type') = 'html';
select 'awr_report_text' fn_name from dual where lower('&report_type') = 'text';
select 'awr_report_html' fn_name from dual where lower('&report_type') = 'html';
select '80' lnsz from dual where lower('&report_type') = 'text';
select '1500' lnsz from dual where lower('&report_type') = 'html';
set linesize &lnsz;
column report_name new_value report_name noprint;
--select 'sp_'||:bid||'_'||:eid||'.'||'&ext' report_name from dual;
select 'report_'||:day||'.'||'&ext' report_name from dual;
set termout off;
spool &report_name;
select output from table(dbms_workload_repository.&fn_name(:dbid, :inst_num,:bid, :eid,:rpt_options ));
spool off;
set termout on;
clear columns sql;
ttitle off;
btitle off;
repfooter off;
undefine report_name
undefine report_type
undefine fn_name
undefine lnsz
undefine NO_OPTIONS
 
3.在crontab 裡面新增執行時間

crontab -l 10 4,8,12,16,20,0 * * * /home/oracle/backup/script/report4.sh 

 
 
上述指令碼是沒4小時生成一次awr報告,大家可以根據自己需要修改生成時間
 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12457158/viewspace-753875/,如需轉載,請註明出處,否則將追究法律責任。

相關文章