ablog

不器用で落着きのない技術者のメモ

AWRレポートを一気に出力するスクリプト

STATSPACKレポートを全部一気に出力するスクリプト - MATSU’s vision
を参考にAWRレポートを一気に出力するスクリプトを作ってみた。
必要に迫られてやっつけでつくったのでおかしなところがあるかも。。。

ファイルリスト

$ find .
.
./output_report.sh
./output_report.sql
./log

実行方法

$ su - oracle
$ ./output_report.sh

実行結果

$ find ./log
./log
./log/awr_tmp.sql
./log/455_456.txt
./log/456_457.txt
./log/458_459.txt
./log/459_460.txt

ソースコード

  • output_report.sh
#!/bin/sh

LANG=C
export LANG
NLS_LANG=American_America.JA16EUC
export NLS_LANG

LOG_DIR=log
BASE_DIR=`dirname $0`

if [ ! -d "${BASE_DIR}/${LOG_DIR}" ]
then
	mkdir "${BASE_DIR}/${LOG_DIR}"
fi

cd "${BASE_DIR}/${LOG_DIR}"
sqlplus system/manager @../output_report.sql
  • output_report.sql
    • 直近2世代のレポートを出力するようにしている。
set pages 0
spool awr_tmp.sql
 select 
 'define report_type=text' || chr(10) ||
 'define num_days=2' || chr(10) ||
 'define begin_snap='  || SNAP_ID      || chr(10) ||
 'define end_snap='    || (SNAP_ID + 1)|| chr(10) ||
 'define report_name=' || SNAP_ID || '_' || (SNAP_ID + 1) || '.txt'  ||
 chr(10) ||
 '@?/rdbms/admin/awrrpt.sql' || chr(10)
 from sys.dba_hist_snapshot
 where snap_id > 
     (select max(snap_id)-3 from sys.dba_hist_snapshot)
     and snap_id < (select max(snap_id) from sys.dba_hist_snapshot)
 order by snap_id;
spool off
@awr_tmp.sql

exit