おらくるのいる生活

OracleのDBAとしての、障害対応やらパフォーマンス・チューニングやらの日々を綴っています

複数のAWRレポートをまとめて出力するスクリプト

パフォーマンス・チューニングに欠かせないツールの一つにAWRレポートがありますが、時には1週間分などまとめて大量のレポートを出力する必要が出てきます。

そこで、複数のAWRレポートをまとめて出力するスクリプトです。

 

get_awr_base.sql

set head off
set feed off


col min_snap new_value min_snap
col max_snap new_value max_snap

select max(SNAP_ID) min_snap from dba_hist_snapshot where INSTANCE_NUMBER=(select INSTANCE_NUMBER from v$instance) and
END_INTERVAL_TIME <= to_timestamp('&1'||':59','yyyy/mm/dd_hh24:mi:ss') ;

select max(SNAP_ID) max_snap from dba_hist_snapshot where INSTANCE_NUMBER=(select INSTANCE_NUMBER from v$instance) and
END_INTERVAL_TIME <= to_timestamp('&2'||':59','yyyy/mm/dd_hh24:mi:ss') ;


spool /tmp/get_awr.sql

select
'define report_type=html' || chr(10) ||
'define num_days=1' || chr(10) ||
'define begin_snap=' || SNAP_ID || chr(10) ||
'define end_snap=' || (SNAP_ID + 1)|| chr(10) ||
'define report_name=/tmp/awr_' || instance_name || '_' || to_char(END_INTERVAL_TIME,'yyyymmdd_hh24mi') || '.html' || chr(10) ||
'@?/rdbms/admin/awrrpt.sql' || chr(10) ||
'execute DBMS_LOCK.SLEEP(1)' ||chr(10)
from DBA_HIST_SNAPSHOT s,v$instance i
where SNAP_ID between &min_snap and &max_snap -1
and s.INSTANCE_NUMBER = i.INSTANCE_NUMBER
order by SNAP_ID;

spool off

@/tmp/get_awr.sql

 このスクリプトを作業ディレクトリ(/tmp)に配置し、以下の形式で開始・終了日時を指定して実行します。(時刻は時分まで指定します)

SQL> @get_awr_base.sql 2019/11/13_08:00 2019/11/13_12:00

ファイル名は以下の通り、awr_<SID>_<開始年月日>_<開始時分>.htmlの形式となります。

ls -ltr /tmp/awr*
-rw-r--r-- 1 oracle oinstall 1355881 Nov 13 12:48 /tmp/awr_orcl1_20191113_0800.html
-rw-r--r-- 1 oracle oinstall 1359349 Nov 13 12:49 /tmp/awr_orcl1_20191113_0900.html
-rw-r--r-- 1 oracle oinstall 1364006 Nov 13 12:49 /tmp/awr_orcl1_20191113_1000.html
-rw-r--r-- 1 oracle oinstall 1447829 Nov 13 12:49 /tmp/awr_orcl1_20191113_1020.html
-rw-r--r-- 1 oracle oinstall 1504065 Nov 13 12:50 /tmp/awr_orcl1_20191113_1100.html

/tmp配下に出力されるので、Windowsの場合は/tmp部分をc:\tmpなどに変更して下さい。

 

念のため補足ですが、AWRレポートの利用には、EnterpriseEditionのDIAGNOSTICパックおよびTUNINGパックの購入が必要です。