grab awr report
sedikit automasi gather awr report dgn bantuan ksh…. cukup inputan jumlah hari saja, script ini akan mengambil semua awr report dari sysdate mundur sejumlah hari yg ditentukan…..
#!/bin/ksh
if [ $# -ne 5 ]
then
echo “penggunaan awrsimple.sh <jumlah hari> <lokasi directory awr> <nomor instance> <username> <tns alias>”
exit
fi
num_days=$1
awrloc=$2
instnum=$3
username=$4
tns=$5
exec 4>/dev/tty
function getpass
{
typeset prompt=$1
typeset backspace=$(echo \\b\\c)
typeset enter=$(echo \\r\\c)
typeset savesetting=$(stty -g)
typeset keystroke password n i reading result
n=0
echo “${prompt}”\\c >&4
stty -echo -icrnl -icanon min 1 time 0
reading=1
while ((reading)) ; do
keystroke=$(dd bs=1 count=1 2>/dev/null)
case $keystroke in
$enter)
reading=0
;;
$backspace)
if ((n)) ; then
echo “${backspace} ${backspace}”\\c >&4
((n=n-1))
fi
;;
*)
echo \*\\c >&4
data[n]=$keystroke
((n=n+1))
esac
done
stty “$savesetting”
echo >&4
result=”"
i=0
while ((i<n)) ; do
result=”${result}${data[i]}”
((i=i+1))
done
echo $result
return 0
}
passwd=$(getpass “password : “)
sqlplus -s $username/$passwd@$tns as sysdba <<EOF > log1.txt
set serveroutput on
set lines 125
set pages 1000
set feedback off
set echo off
set ver off
col report_name form a40
col betime form a5
col edtime form a5
col instart_fmt form a20
col snapdat form a20
spool awrsimple.sql
DECLARE
CURSOR c1 IS
select to_char(s.startup_time,’dd Mon “at” HH24:mi:ss’) instart_fmt
, di.instance_name inst_name
, di.db_name db_name
, s.snap_id snap_id
, to_char(s.end_interval_time,’dd Mon YYYY HH24:mi’) snapdat
, to_char(s.end_interval_time,’DDmonRR’) repdate
, to_char(s.end_interval_time,’HH24′) snaphour
, s.snap_level lvl
from dba_hist_snapshot s
, dba_hist_database_instance di
, v\$database da
, v\$instance ins
where s.dbid = da.dbid
and di.dbid = da.dbid
and s.instance_number = ins.instance_number
and di.instance_number = ins.instance_number
and ins.instance_number = $instnum
and di.dbid = s.dbid
and di.instance_number = s.instance_number
and di.startup_time = s.startup_time
and s.end_interval_time >= decode( $num_days
, 0 , to_date(’31-JAN-9999′,’DD-MON-YYYY’)
, 3.14, s.end_interval_time
, to_date((select to_char(max(end_interval_time),’dd/mm/yyyy’)
from dba_hist_snapshot),’dd/mm/yyyy’) - ($num_days-1))
order by di.db_name, di.instance_name, s.snap_id;
v_report_name varchar2(100);
v_db_name varchar2(30);
v_beid varchar2(3);
v_snap_begin number(8);
v_snapdate varchar2(8);
v number(3) := 1;
BEGIN
select name into v_db_name from v\$database;
FOR I IN C1 LOOP
if v > 1 then
dbms_output.enable(1000000);
dbms_output.put_line(’define num_days=’||$num_days);
dbms_output.put_line(’define report_type=html’);
dbms_output.put_line(’define begin_snap=’||v_snap_begin);
dbms_output.put_line(’define end_snap=’||i.snap_id);
v_report_name:=’awr_’||lower(v_db_name)||’$instnum\_’||v_snapdate||’_'||v_beid||’-'||i.snaphour||’.html’;
dbms_output.put_line(’define report_name=$awrloc’||v_report_name);
dbms_output.put_line(‘@?/rdbms/admin/awrrpt.sql’);
end if;
v := v + 1;
v_beid := i.snaphour;
v_snap_begin := i.snap_id;
v_snapdate := i.repdate;
END LOOP;
END;
/
spool off
@awrsimple.sql
set echo on
set feed on
set ver on
exit;
EOF
About this entry
You’re currently reading “grab awr report,” an entry on dbs247 blog
- Published:
- 03.11.10 / 12pm
- Category:
- general
No comments
Jump to comment form | comments rss [?] | trackback uri [?]