Oracleでインシデントが発生した時の調査手順
アラートログを取得する。場所はパラメータbackground_dump_destで設定されてたディレクトリに出力される。
アラートログはこの時点でコピーをして、新しいログが混ざらないようにする。
アラートログではシステムパラメータからまずOracleの環境を確認する。システムパラメータは下記のラベルから始まる。
System parameters with non-default values:
次にエラーメッセージを探す。エラーが発生している時間がわかっていれば該当の行近くに飛ンでからエラーメッセージを探せばよい。エラーメッセージには以下の単語が含まれている傾向がある。
- ORA- ではじまる
- Error
- Kill
- Terminate
- Abort
時間がはっきりしないときにはアラートログの末尾に飛び上記の単語で検索をかける。
アラートログからエラーログを見つけたら、詳細な分析に移る。これに使われるのがトレースファイルである。トレースファイルはbackground_dump_destで指定されたディレクトリに出力される。
トレースファイルはOracleのプロセスが異常終了した際に作成される。トレースファイルはプロセス毎に分かれている。数が数十ファイルあるためにアラートログからあらかじめエラーに関連するプロセスのあたりをつける。
例)下記は実際のアラートログである。
Thread 1 advanced to log sequence 162090 (LGWR switch)
Current log# 4 seq# 162090 mem# 0: G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA\REDO04_1.LOG
Tue Sep 22 23:56:03 2015
Errors in file d:\oracle\product\11.2.0\diag\rdbms\ora\ora\trace\ora_arc0_5468.trc (incident=394020):
ORA-00494: エンキュー[CF]の900秒を超える保持時間('inst 1、osid 4820'による)は長すぎます
Incident details in: d:\oracle\product\11.2.0\diag\rdbms\ora\ora\incident\incdir_394020\ora_arc0_5468_i394020.trc
Killing enqueue blocker (pid=4820) on resource CF-00000000-00000000 by (pid=5468)
by killing session 5.21
Killing enqueue blocker (pid=4820) on resource CF-00000000-00000000 by (pid=5468)
by terminating the process
ARC0 (ospid: 5468): terminating the instance due to error 2103
Tue Sep 22 23:56:04 2015
opiodr aborting process unknown ospid (680) as a result of ORA-1092
Tue Sep 22 23:56:04 2015
ORA-1092 : opitsk aborting process
Instance terminated by ARC0, pid = 5468
上記ログからは以下のことがわかる。
- ora_arc0_5468.trc
- ora_arc0_5468_i394020.trc
- LGWR
- ARC0
最初の2つはトレースファイルそのものである。次の2つはプロセス名であるので、LGWRおよびARC0のトレースファイルを見る。