Oracle 11g ADRに関する検証 その1

<Oracle 11g ADRに関する検証 その1>
ペンネーム: ミラニスタ

今週から、自動診断リポジトリ(ADR:Automatic Diagnostic Repository)
の検証を行います。

▼ はじめに

11gから障害診断インフラストラクチャという仕組みが導入され、問題の防
止、検出、診断および解決に関する運用コストが削減できるそうです。

ところで、皆さんは RAC:Real Application Cluster の障害試験を行った経
験はありませんか?
例えば、2ノード RAC構成でインターコネクト障害を模擬するために、冗長
化されたケーブルを両方とも抜いてしまうようなケースにおいて、RAC がどん
な挙動を行っているのか、何を見て確認すればよいでしょうか?

ざっと必要と思われるログ・ファイル等と各々の格納場所は以下のとおりで
す。

1. データベースのアラート・ログ
初期化パラメータ BACKGROUND_DUMP_DEST に指定されたディレクトリ

2. Cluster Ready Servicesデーモン(crsd)・ログ・ファイル
$ORA_CRS_HOME/log//crsd

3. Oracle Cluster Registry(OCR)ログ・ファイル
$ORA_CRS_HOME/log//client

4. クラスタ同期化サービス(CSS)・ログ・ファイル
$ORA_CRS_HOME/log//cssd

5. イベント・マネージャ(EVM)・ログ・ファイル
$ORA_CRS_HOME/log//evmd

6. リスナー・ログ
$ORACLE_HOME/network/log

7. Syslog
/var/log (Linux)等

となっている部分は各ノード毎に存在するため、実際に障害試験
を行う際、参照すべきログ・ファイル等は多岐にわたります。
その他、ASMを使っていればASMインスタンスのアラート・ログなども確認し
なければなりません。

$ tail -f

として、ログ・ファイルをモニターしたりすることはよくありますが、狭い
ディスプレイの中でTerminal画面をいくつも開いて、どれがどのログだったか
わからなくなってしまった…なんてことは筆者の場合多々あります。

障害試験という計画された障害状態の確認でさえ面倒なのですから、実際の
障害時に限られた時間で原因を探求するというのは非常に大変な作業です。

障害診断インフラストラクチャの中で中核となる「自動診断リポジトリ(ADR)」
というのは、あちこちに存在するログ・ファイル等を一元管理してくれるそう
です。

何か運用者にとって、とても有難い機能のような気がします。
早速、検証してみましょう!

▼ ADRの概要

最初に略語の意味を確認しておきましょう。
・Diagnostic 【形】診断に用いる
・Repository 【名】貯蔵所、集積所、埋葬所(?!)

「診断」というのはちょっと興味をそそられる言葉ですが、とりあえずADR
がどんなものなのかということを押さえておきます。
Repositoryと言っても、ADRはOracleデータベースの中に情報を格納するの
ではなく、ファイルベースのリポジトリです。
つまり、障害でインスタンスが停止してしまったから情報にアクセスできま
せん、ということでは困ってしまうので、情報はあくまでもファイルとして保
持されます。
ADRでは、アラート・ログ、トレース・ファイル、ダンプ・ファイル等の情
報を「診断データ」と呼んでいます。

■ 検証環境
RedHatLinux ES4 Update 5
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0

○ ADRベースとは?
診断データを一元管理するからには、「どこに?」格納するのかが大切です。
ADRでは、ルート・ディレクトリを「ADRベース」と呼んでいます。
データベースの場合、その場所は初期化パラメータ「DIAGNOSTIC_DEST」で
指定されたディレクトリになり、デフォルトは ORACLE_BASE 環境変数の値に
なります。

例)

$ echo $ORACLE_BASE
/opt/oracle

○ ADRベースを変更してみる

筆者は Unix環境でOracleを運用してきた経験が長いので、アラートログや、
リスナー・ログが /opt の下に出力されることに違和感を感じていました。
「ログの吐き先はやっぱり /var以下でしょ!!」という気がしますので、
せっかくですからADRベースを /var以下に変更してみることにします。

1) 変更前

  SQL> conn / as sysdba
  接続されました。
  SQL> show parameter diag
  
  NAME                TYPE        VALUE
  ------------------- ----------- --------------------
  diagnostic_dest     string      /opt/oracle
  

2) 出力先ディレクトリの作成

  # cd /var
  # mkdir oracle
  # chown : oracle

例)

  $ ls -l /var
  ..........................................................
  drwxr-xr-x  2 ora111d oinstall 4096  x月 xx xx:xx oracle
  ..........................................................
  
  $ ls -l /var/oracle
  合計 0               ←当然何もない
  

3) ADRベースの変更

  SQL> set timing on
  SQL> alter system set diagnostic_dest='/var/oracle';
  
  システムが変更されました。
  
  経過: 00:00:38.17   ←時間がかかっていることに注意!!
  
  SQL> show parameter diag
  
  NAME                TYPE        VALUE
  ------------------- ----------- --------------------
  diagnostic_dest     string      /var/oracle

オンラインで変更できることに注目してください。

また、従来からある以下の初期化パラメータは、下位互換性のために残され
ていますが、実質的に ADR のディレクトリ構造の中に取り込まれています。

NAME                  VALUE
--------------------- --------------------------------------------
background_dump_dest  /var/oracle/diag/rdbms/ora111d/ora111d/trace
core_dump_dest        /var/oracle/diag/rdbms/ora111d/ora111d/cdump
user_dump_dest        /var/oracle/diag/rdbms/ora111d/ora111d/trace

○ ADRのディレクトリ構造

  $ cd /var/oracle
  $ ls -R
  .:
  diag
  
  ./diag:
  rdbms
  
  ./diag/rdbms:
  ora111d
  
  ./diag/rdbms/ora111d:
  i_1.mif  ora111d
  
  ./diag/rdbms/ora111d/ora111d:
  alert  cdump  hm  incident  incpkg  ir  lck  metadata  stage  sweep  trace
  
  ./diag/rdbms/ora111d/ora111d/alert:
  log.xml
  
  ./diag/rdbms/ora111d/ora111d/cdump:
  
  ./diag/rdbms/ora111d/ora111d/hm:
  
  ./diag/rdbms/ora111d/ora111d/incident:
  
  ./diag/rdbms/ora111d/ora111d/incpkg:
  
  ./diag/rdbms/ora111d/ora111d/ir:
  
  ./diag/rdbms/ora111d/ora111d/lck:
  (省略)
  
  ./diag/rdbms/ora111d/ora111d/metadata:
  (省略)
  
  ./diag/rdbms/ora111d/ora111d/stage:
  
  ./diag/rdbms/ora111d/ora111d/sweep:
  
  ./diag/rdbms/ora111d/ora111d/trace:
  alert_ora111d.log

知らない間に、こんなに沢山のディレクトリやファイルが出来ていました。
時間がかかる訳です。

ADRのディレクトリ情報等は V$DIAG_INFO ビューを検索することによっても
確認することができます。

SQL> COL NAME FOR A23
SQL> COL VALUE FOR A70
SQL> SET LINES 110
SQL> SELECT * FROM V$DIAG_INFO;

INST_ID NAME                    VALUE
------- ----------------------- ------------------------------------------------------------------
      1 Diag Enabled            TRUE
      1 ADR Base                /var/oracle
      1 ADR Home                /var/oracle/diag/rdbms/ora111d/ora111d
      1 Diag Trace              /var/oracle/diag/rdbms/ora111d/ora111d/trace
      1 Diag Alert              /var/oracle/diag/rdbms/ora111d/ora111d/alert
      1 Diag Incident           /var/oracle/diag/rdbms/ora111d/ora111d/incident
      1 Diag Cdump              /var/oracle/diag/rdbms/ora111d/ora111d/cdump
      1 Health Monitor          /var/oracle/diag/rdbms/ora111d/ora111d/hm
      1 Default Trace File      /var/oracle/diag/rdbms/ora111d/ora111d/trace/ora111d_ora_26133.trc
      1 Active Problem Count    1
      1 Active Incident Count   50

11行が選択されました。

“Default Trace File”というのは、現行セッションにおけるトレース・ファ
イルのフルパスを示します。

次回は、リスナー・ログの出力先変更と、ADRをコマンド・ラインで管理す
るための ADRコマンド・インタプリタ(ADRCI)について紹介します。

今日はここまで。

低気圧のせいで電車が遅れた
恵比寿より

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

Oracle 11g ADR に関する検証 全4回 [電子書籍版]

以下よりダウンロードできます。