データベースについて調べてみた

データベースについて調べたことのメモ。Oracle要素多めになる予定。

Oracle Autonomous DatabaseでAWRやアラートログの取り方を調べてみた

前回Oracle Autonomous Databaseの構築をしたが、Autonomous DatabaseではOS領域に直接アクセス(例:SSHでログイン、ファイルへのアクセス)できないことから、以下のやり方について疑問を持ったため、今回調べてみた。

  1. AWRレポートの取得
  2. アラートログの確認
  3. トレースファイルの確認

 

1. AWRレポートの取得

OCIコンソールでAWRレポートを取得したいAutonomous Databaseのページを表示し、「パフォーマンス・ハブ」をクリックする。

 

「パフォーマンス・ハブ」のページへ遷移後、右上にある「レポート」をクリックすると、「自動ワークロード・リポジトリ」が出てくるので、これをクリックする。

 

AWRレポートの生成に使用するスナップショットの選択ダイアログが表示される。開始スナップショットと、終了スナップショットをそれぞれ選択する。

 

スナップショットを選択したら、「ダウンロード」をクリックする。

 

AWRレポートの生成処理が開始すると、「パフォーマンス・ハブ」の画面右上に「レポートの生成が進行中です。」というメッセージが表示され(図中の赤丸部分)、生成が完了すると、ブラウザのファイル保存ダイアログが表示されるので、保存したい場所を選択することで、AWRレポート(HTML形式)が出力される。

 

 

2. アラートログの確認

Autonomous Databaseでは、直接アラートログファイルの中身をエディタ等で参照することはできないため、SQL Developerなどでデータベースインスタンスに接続し、下記の様なSQLで、v$diag_alert_extビューを参照することで、アラートログの中身を参照することができる。

SELECT originating_timestamp, message_text
FROM v$diag_alert_ext 
WHERE originating_timestamp BETWEEN sysdate - 1 AND sysdate
ORDER BY originating_timestamp;

 

上記のSQLは、1日前からのアラートログの中身を参照する例だが、参照したい期間を変更したい場合は、originating_timestampの範囲を指定しているWHERE句を適宜変更すればよい。

参考までに、SQL Developerで実行すると、以下のようにアラートログの中身が出力される。


※表示時刻を日本時間にしたい場合

今回出力されたoriginating_timestampを確認したところ、タイムゾーンが「GMT」の時刻で表示されていた。これを日本のタイムゾーン(Asia/Tokyo)で表示させたい場合は、下記のようなAT LOCALを使ったSQLとすることで、日本の時刻で表示することができる。

SELECT originating_timestamp AT LOCAL, message_text
FROM v$diag_alert_ext
WHERE originating_timestamp BETWEEN sysdate - 1 AND sysdate
ORDER BY originating_timestamp;

 

originating_timestampの範囲を日本の時刻で指定したい場合は、WHERE句でも下記のようにAT LOCALを使用する。

WHERE originating_timestamp AT LOCAL BETWEEN to_timestamp('2023/08/25 00:00:00','yyyy/mm/dd hh24:mi:ss') AND to_timestamp('2023/08/25 09:00:00','yyyy/mm/dd hh24:mi:ss')

 

 

3.トレースファイルの確認

トレースファイルもアラートログと同様に、ファイルの中身を直接参照できないため、SQL Developerなどでデータベースインスタンスに接続して、SQLを用いて取得する必要がある。

トレースファイルの内容を参照するためには、以下のステップを踏む必要がある。

  1. トレースファイル名の確認
  2. トレースファイルの中身の参照

 

トレースファイル名は、以下のようなSQLでv$diag_trace_fileビューから取得する。ファイル名が複数表示されると思うので、更新時刻(change_time)を参考に、中身を確認したいトレースファイル名のあたりをつけていく必要がある。

SELECT trace_filename, change_time 
FROM v$diag_trace_file 
WHERE trace_filename LIKE '%ora%' 
ORDER BY change_time;

上記はユーザトレース(*ora*.trc)に絞ってトレースファイル名を取得するSQLであるが、特定のバックグラウンドプロセスのトレースファイルを取得したい場合は、それに合わせたWHERE句に修正する。

 

トレースファイルの中身は、以下のSQLでv$diag_trace_file_contentsビューから取得する。トレースファイル名は、前段で取得したトレースファイル名を指定する。

SELECT payload 
FROM v$diag_trace_file_contents 
WHERE trace_filename = 'トレースファイル名' 
ORDER BY line_number;

 

 

前回の記事:OCIのOracle Autonomous Databaseを構築してみた