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]を押します。
次回は、クリティカル・エラーをわざと発生させて遊んでみましょう。
今日はここまで。
今日は素晴らしく天気がいい!!
恵比寿より