我们在运维Oracle数据库时,有时候会对比Oracle 的awr报告,那么如何批量生成报告呢,下面几个脚本以供参考。
sql脚本,注意时间格式
select
'spool awr_'||dbid||'_'||instance_number||'_'||b_snap_id||'_'||e_snap_id||'.html'
||chr(10)||
'select output from table(dbms_workload_repository.awr_report_html('||dbid||', '||instance_number||','||b_snap_id||','||e_snap_id||'));'
||chr(10)||
'spool off'
from
(select dbid,instance_number,snap_id b_snap_id,lead(snap_id,1,0) over(partition by instance_number order by snap_id) e_snap_id
from dba_hist_snapshot
where begin_interval_time>=trunc(sysdate-1)
and begin_interval_time<=trunc(sysdate))
where e_snap_id!=0;
sh脚本,注意脚本开头时间
#!/bin/sh
# set the environment
source /home/oracle/.bash_profile
CONNECTSTR=" / as sysdba"
BEGIN_TIME="20211012_09:00:00"
END_TIME="20211012_12:00:00"
function Dbid {
sqlplus -S $CONNECTSTR < trunc(sysdate-1)
and instance_number in (select instance_number from v\$instance)
order by snap_id;
exit
EOF
}
function Snap_id_between_time {
sqlplus -S $CONNECTSTR <= trunc(to_date('$BEGIN_TIME','YYYYMMDD_HH24:MI:SS'),'hh')
and trunc(end_interval_time,'hh')<= trunc(to_date('$END_TIME','YYYYMMDD_HH24:MI:SS'),'hh')
and instance_number in (select instance_number from v\$instance)
order by snap_id;
exit
EOF
}
function Snap_id_between_id {
sqlplus -S $CONNECTSTR <= to_number($BEGIN_ID)
and snap_id<= to_number($END_ID)
and instance_number in (select instance_number from v\$instance)
order by snap_id;
exit
EOF
}
echo "==========++++++++++++++===========";
CMDPM=`echo $1 | awk '{print tolower($1)}'`
case $CMDPM in
bi | -bi | byid)
SNAP_ID=`Snap_id_between_id`
;;
bt | -bt | bytime)
SNAP_ID=`Snap_id_between_time`
;;
lt | -lt | liketime)
SNAP_ID=`Snap_id_like_time`
;;
*)
#SNAP_ID=`Snap_id_like_time`
echo "please usage like : $0 -bt(bytime)"
;;
esac
echo "$SNAP_ID";
echo "==========++++++++++++++===========";
#Lftp to sftpServer .lftp Just fo Linux.
function Lftp_awr_report {
cd .
for VAR in *.htm*
do
lftp -u ${FTPUSER},${FTPPASS} sftp://${FTPSERVERIP}<
内容整理自网络,如有侵权,请联系