ablog

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

AWRレポートを CSV に変換する手順

AWRレポートを CSV に変換する手順。CSVEXCEL のピボットグラフなどを使って分析すると便利です。

$ git clone https://github.com/yasushiyy/awr2csv.git
$ cd awrrep
  • AWRレポートを CSV に変換する。
$ python ../awrhtml2csv.py *.html
  • 変換後のファイルを確認する。
$ ls -1 *.csv
events_background.csv
events_foreground.csv
events_topn.csv
inst_efficiency.csv
load_profile.csv
parameters.csv
seg_logical.csv
seg_phys_reads.csv
seg_phys_writes.csv
seg_unoptimized.csv
sql_cpu.csv
sql_elapsed.csv
sql_executions.csv
sql_gets.csv
sql_parses.csv
sql_reads.csv
sql_unoptimized.csv
sql_user_io.csv
sql_version.csv
time_model.csv

前提

  • NLS_LANG は American_America. で AWR レポートを出力する。

Tips

NLS_LANG が American_America... で出力されておらずAWRレポートの日付が "31-9月 -15" のようになっていて以下のエラーになる場合は、

$ python ../../awrhtml2csv.py *.html 
Processing awrrpt_1_41050_41051.html...
Traceback (most recent call last):
  File "../../awrhtml2csv.py", line 135, in <module>
    output = parse(filelist)
  File "../../awrhtml2csv.py", line 97, in parse
    st = datetime.strptime(snap.text, '%d-%b-%y %H:%M:%S')
UnicodeEncodeError: 'ascii' codec can't encode character u'\u6708' in position 4: ordinal not in range(128)

月を英字に変換する。

$ perl -i.org -pe 's/8月 /Aug/g;s/9月 /Sep/g' *.html

参考


追記(2017/09/29):

$ python ../../awrhtml2csv.py *.html

xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 9192, column 13

とエラーになったので、調べたら、AWRレポートの末尾に「9317行が選択されました。」と入ってるのが原因だった。

End of Report
</body></html>

9317行が選択されました。

Perl ワンライナーで除去したらエラーが出なくなった。

$ perl -i.org -pe 's/.*行が選択されました。//g' *.html