Oracle 11g ADRに関する検証 その2
<Oracle 11g ADRに関する検証 その2>
ペンネーム: ミラニスタ
自動診断リポジトリ(ADR:Automatic Diagnostic Repository)の検証を行っ
ています。
▼ 前回のおさらい
前回は、ログファイル等を一元管理する ADR の概要について簡単に説明し
ルート・ディレクトリとなる「ADRベース」を変更してみました。(データ
ベースのみ)
▼ リスナーの ADRベースを変更してみる
11gからは、リスナーの診断データもデフォルトでADRに出力されます。
デフォルトのADRベースってどこでしたっけ?そうです、$ORACLE_BASE でし
たね。
インストール時に、データベース、リスナーあるいはASMのような製品は特
に指定しない限り同じ環境変数 ORACLE_BASE を参照してADRベースを設定しま
す。
例えば ADR_BASE のような環境変数があって、各製品が $ORACLE_BASE とは
別のディレクトリを共通のADRベースとできるような仕様となっていてもよさ
そうですが、実際はそうではないようです。理由は???です。
従って、一括でADRベースを変更することはできなくて、各製品ごとに変更
しなければなりません。
前回データベースのADRベースを動的に変更してみました。今回はリスナー
のADRベースを変更しますが、結論から言うとリスナーの再起動が必要で動的
に変更することはできません。
つまり、データベースのようにADRベースを動的に変更可能な製品があるた
め、ADRベースを環境変数で特定(固定化)するような仕様になっていないの
かもしれません。
デフォルトではリスナー・ログも $ORACLE_BASE 以下に出力されます。この
リスナー・ログというのは意外と曲者で、定期的に圧縮や削除をしないと知ら
ない間に数GBにもなってしまったというようなことがあります。
そこで、リスナーの診断データも /var/oracle 以下に出力されるように設
定を変更してみましょう。
1. 変更前確認
$ lsnrctl status
LSNRCTL for Linux: Version 11.1.0.6.0 - Production on xx-x x -2008 xx:xx:xx
Copyright (c) 1991, 2007, Oracle. All rights reserved.
(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))に接続中
リスナーのステータス
------------------------
別名 LISTENER
バージョン TNSLSNR for Linux: Version 11.1.0.6.0 - Production
開始日 xx-x月 -2008 xx:xx:xx
稼働時間 x 日 x 時間 x 分 xx 秒
トレース・レベル off
セキュリティ ON: Local OS Authentication
SNMP OFF
パラメータ・ファイル /opt/oracle/ora111d/product/11.1.0/db_1/network/admin/listener.ora
ログ・ファイル /opt/oracle/diag/tnslsnr/hostname/listener/alert/log.xml
^^^^^^^^^^^
↑ADRベースはORACLE_BASEになっている
...................................................................
2. LISTERNER.ORA 変更
$ cd $ORACLE_HOME/network/admin
$ vi listener.ora
.....................
LISTENER =
(DESCRIPTION_LIST =
.....................
ADR_BASE_LISTENER=/var/oracle ←この行を追加
(保存して終了)
追加する行の書式は、ADR_BASE_(リスナー名)=(ADRベースのパス名)
注意点は、''(シングルクォーテーション)で囲まないことです。
3. 設定反映(リスナー再起動)
$ lsnrctl stop
LSNRCTL for Linux: Version 11.1.0.6.0 - Production on xx-x x -2008 xx:xx:xx
Copyright (c) 1991, 2007, Oracle. All rights reserved.
(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))に接続中
コマンドは正常に終了しました。
$ lsnrctl start
LSNRCTL for Linux: Version 11.1.0.6.0 - Production on xx-x x -2008 xx:xx:xx
....................................................................
ログ・ファイル /var/oracle/diag/tnslsnr/hostname/listener/alert/log.xml
^^^^^^^^^^^
↑ADRベースが変更された
...................................................................
4. 参考(動的変更は可能か?)
2. の状態から、リスナーの再起動(stop/start)ではなく、listener.ora
の再読込み(reload)で設定が動的に変更可能か検証
LSNRCTL> reload
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
The command completed successfully
....................................................................
LSNRCTL> status
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
....................................................................
Listener Log File /opt/oracle/diag/tnslsnr/hostname/listener/alert/log.xml
^^^^^^^^^^^
↑ADRベースは変更されない
▼ ADRコマンド・インタプリタ(ADRCI)
データベースとリスナーのADRベースを変更するだけで、メルマガ1回半分
を費やしてしまいました。やっと1合目にたどり着きました。ふうっ!
鋭い読者の皆さんはお気づきかもしれませんが、リスナー・ログ(・ファイ
ル)は、XML形式で出力されています。(拡張子に注目)実はアラート・ログ
も同様です。(ファイル名はどちらも log.xml です。)
論より証拠、実際のファイルの中身は以下のようになっています。
……………………..
Completed: ALTER DATABASE OPEN
……………………..
従来は時刻と「Completed: ALTER DATABASE OPEN」というテキストが各1行
出力されるだけでしたが、msgタグの中にいろいろな情報が含まれているのが
わかります。つまり従来と比べて情報が多い分出力サイズが大きくなります。
(従来型のアラート・ログは下位互換性のため background_dump_dest に出力
されています。)
なぜこのような形式になっているのかというと、Oracle Enterprise Manager
(OEM)で診断データを管理するためです。具体的には ORA-600 のようなクリ
ティカルなエラーが発生した場合、同時に出力されるトレース・ファイルやコ
ア・ダンプのような診断データとの紐付けをすることで問題解決までの効率化
を図るためです。(これについては別途検証します。)
ただし、OEMを使っていない環境や、アラート・ログの中身をちょこっと確
認したいという場合に便利なのが、ADRコマンド・インタプリタ(ADRCI)です。
○ ADRCI 起動方法
$ adrci ADRCI: Release 11.1.0.6.0 - Beta on x x月 xx xx:xx:xx 2008 Copyright (c) 1982, 2007, Oracle. All rights reserved. ADR base = "/var/oracle" adrci>
○ アラート・ログ(データベース)を確認しよう
adrci> show alert
Choose the alert log from the following homes to view:
1: diag/rdbms/ora111d/ora111d
2: diag/tnslsnr/hostname/listener
Q: to quit
Please select option: 1 ←入力して Enter!
ここが、ADRの一番いいところですね!アラート・ログもリスナー・ログも
同じADRベースに格納されているので、どちらを見たいか選択するだけです。
(表示結果)
2008-xx-xx 16:20:10.701000 +09:00
ALTER SYSTEM SET diagnostic_dest='/var/oracle' SCOPE=BOTH;
2008-xx-xx 16:21:13.872000 +09:00
Thread 1 advanced to log sequence 1359
Current log# 3 seq# 1359 mem# 0: /opt/oracle/oradata/ora111d/redo03.log
2008-xx-xx 16:29:09.418000 +09:00
Thread 1 advanced to log sequence 1360
Current log# 1 seq# 1360 mem# 0: /opt/oracle/oradata/ora111d/redo01.log
..................................................................
○ 表示を終了させるには
(表示状態) Escキー : (コロン) Please select option: q ←入力して Enter! adrci> ←プロンプトに戻る
○ 表示用インターフェース
$ env | grep EDITOR EDITOR=vi
環境変数EDITORに設定されているエディタソフトが、表示用インターフェー
スとして起動されます。(デフォルトはvi)
指定行にジャンプしたり、文字列を検索したりviを使ったことのある方だっ
たら、大体の感じはわかっていただけると思います。(使ったことのない方
。。。すみません、わかる方に聞いてください。)
ADRCIの詳細は「11g ユーティリティ」のマニュアルを参照してください。
○ 応用編
更新されるアラート・ログの内容を連続的に確認したい場合は、以下の手順
で行います。
adrci> show alert Choose the alert log from the following homes to view: 1: diag/rdbms/ora111d/ora111d 2: diag/tnslsnr/hostname/listener Q: to quit Please select option: q ← ADRホームパスを確認し、いったん終了させる adrci> set home diag/rdbms/ora111d/ora111d ← ホームパスの設定 adrci> show alert -tail -f
表示終了は[Ctrl]を押しながら[C]を押します。
次回は、クリティカル・エラーをわざと発生させて遊んでみましょう。
今日はここまで。
今日は素晴らしく天気がいい!!
恵比寿より