パフォーマンス・チューニングに欠かせないツールの一つに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)に配置し、以下の形式で開始・終了日時を指定して実行します。(時刻は時分まで指定します)
ファイル名は以下の通り、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パックの購入が必要です。