AWRレポート、AWR SQLレポート一括取得スクリプトを作ったよ。 Tweet
Statspackレポートもそうなのですが、AWRレポート/AWR SQLレポートも個別に取得していると凄ーく辛いんですよね。一日分出力するとか、AWRレポートで処理時間の長いSQL文のAWR SQLレポートを個別に取得しようとなると...
ただでさえ忙しいのに、AWRレポート取得するのに時間掛けたくないですよね。
ということで、やっつけで作ったのですが、そのまま載せるのもあれなんで、やっつけで作った感じを多少減らしてgithubに公開しました。;)
https://github.com/discus/Oracle-AWR-batch-generation-script/blob/master/awrreport_batch.sql
もっといい感じに改造してくれるといいな〜とかとか... :)
Oracle11g R1/R2 Enterprise Edition、HTML形式で出力します。(RAC環境では試してないので多分だめかと。)。
(AWRを利用するには追加ライセンスが必要なのでご注意を)
使い方は・・
SQL*plusを起動し、select any dictionaryシステム権限、dbms_repositoryパッケージの実行権限が付与されたユーザで接続して実行するだけ。
SYSTEMユーザでやる事が多いけど、所変わればなんとやらなので・・・そこんとこよろしく。(w
一括取得なので実行当日を含めてn日分のAWRレポートを取得し、同時に処理時間の長いTop20のAWR SQLレポートも取得します。
レポートは各スナップショット間(今のところ固定)で取得します。
指定するパラメータは、以下の3つ。
AWRレポートを取得する最初のSNAP_IDを指定します。 NULLがデフォルトでほとんどの場合デフォルトのままで事足りると思います。
Enter snap_id for starting AWR report generation. [NULL] :
Enter number of days for reporting period. [1] :
一括取得する日数を指定します。当日を含みます。
当日分のAWRレポートを出力するのであれば、デフォルト値の1のままでOKです。
Enter suffix for AWR reports filename. [NULL] : test
保存するAWRレポートのファイル名に付加するsuffixを指定します。
試験名とか設定するといいですよね。
"test"と指定した場合
awrrpt_nnnn_nnnn_test.htmlや
awrsqrpt_nnnn_nnnn_test_sqlid.html
の形式で保存します。(nnnnはSNAP_ID)
実行例1)当日分の全レポートを取得する例
SYSTEM>
SYSTEM> !ls -l awr*.sql
-rw-r--r-- 1 oracle oinstall 6065 1月 29 18:23 awrreport_batch.sql
SYSTEM> @awrreport_batch
--
-- Oracle AWR and AWR SQL report batch generation script
--
-- ***** This script always generate html format AWR reports. *****
--
Enter snap_id for starting AWR report generation. [NULL] :
Enter number of days for reporting period. [1] :
Enter suffix for AWR reports filename. [NULL] : test
--
--
--
clear break compute;
repfooter off;
ttitle off;
btitle off;
・・・中略・・・
<p />
<br /><a class="awr" href="#top">Back to Top</a><p />
</body></html>
SYSTEM>
実行例2)当日分かつsnap_id=291以降で一括取得。(事前にsnap_idを調べておいてね)
SYSTEM>
SYSTEM> @awrreport_batch
--
-- Oracle AWR and AWR SQL report batch generation script
--
-- ***** This script always generate html format AWR reports. *****
--
Enter snap_id for starting AWR report generation. [NULL] : 291
Enter number of days for reporting period. [1] :
Enter suffix for AWR reports filename. [NULL] : test
--
--
--
clear break compute;
repfooter off;
ttitle off;
btitle off;
・・・中略・・・
<p />
<br /><a class="awr" href="#top">Back to Top</a><p />
</body></html>
SYSTEM>
SYSTEM>
SYSTEM> !ls -l *.html
-rw-r--r-- 1 oracle oinstall 379083 1月 29 22:23 awrrpt_291_292_test.html
-rw-r--r-- 1 oracle oinstall 11899 1月 29 22:23 awrsqrpt_291_292_test_0c83z9rqx45hu.html
-rw-r--r-- 1 oracle oinstall 11899 1月 29 22:23 awrsqrpt_291_292_test_0h3mfbzk6uyw0.html
-rw-r--r-- 1 oracle oinstall 11897 1月 29 22:23 awrsqrpt_291_292_test_2p7t0mw7zvu5z.html
・・・中略・・・
-rw-r--r-- 1 oracle oinstall 11899 1月 29 22:23 awrsqrpt_291_292_test_bhtycgwkxhfj9.html
-rw-r--r-- 1 oracle oinstall 11900 1月 29 22:23 awrsqrpt_291_292_test_bpaggvtfkar9k.html
-rw-r--r-- 1 oracle oinstall 11899 1月 29 22:23 awrsqrpt_291_292_test_c50hdbyuwhfn6.html
-rw-r--r-- 1 oracle oinstall 11892 1月 29 22:23 awrsqrpt_291_292_test_g3f3cw3zy5aat.html
SYSTEM>
なお、Oracleインスタンスが再起動された期間でawrrpt.sqlなどを実行すると、レポートが作成できずエラーでSQL*Plusも終了してしまいますが、本スクリプトでは該当部分のレポートはスキップするようにしてあります。:)
Instance DB Name Snap Id Snap Started Level
------------ ------------ --------- ------------------ -----
lampeye LAMPEYE 274 29 1月 2012 09:33 1
275 29 1月 2012 10:00 1
276 29 1月 2012 10:30 1
277 29 1月 2012 11:00 1
278 29 1月 2012 11:30 1
279 29 1月 2012 12:00 1
280 29 1月 2012 12:30 1
281 29 1月 2012 13:00 1
282 29 1月 2012 13:30 1
283 29 1月 2012 14:00 1
284 29 1月 2012 14:30 1
285 29 1月 2012 15:00 1
286 29 1月 2012 15:30 1
287 29 1月 2012 16:00 1
288 29 1月 2012 16:30 1
289 29 1月 2012 17:00 1
290 29 1月 2012 17:30 1
291 29 1月 2012 18:31 1 ←再起動されてる
292 29 1月 2012 18:34 1
293 29 1月 2012 22:26 1 ←再起動されてる
Enjoy!
| 固定リンク | 0
コメント
5年経ってもきちんと動作するこのスクリプト好き❤
おてすきでstatspack版もお願いしますm(_ _)m
投稿: omc | 2017年8月24日 (木) 14時34分
ありがとうございます。
11gではRACも含めて今でも使っているます。
12cだとMTA環境以外なら使えると思いますが、
11g環境でも他のデータベースのAWRをインポートしてレポートを出力したい場合にはDBIDを選択できるようにする必要があります.
また、12.2のMTA環境だとPDBを選択したいなど最新版への対応も今後は必要になると思います。
statspackですがstatspack向けの動揺のスクリプトを持っている方やすでに公開されているものなどがあるので
あえて作成していないのですが、statspackでもMTA対応や、他のデータベースからインポートしてレポートを出力したいと言うケースでは
作成しておくと便利かもしれないですね。
投稿: discus | 2017年8月31日 (木) 12時16分