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

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

自動診断リポジトリ(ADR:Automatic Diagnostic Repository)の検証を行っ
ています。

▼ 前回のおさらい

前回は、リスナーの ADRベースを変更してみました。また、ADRコマンド・
インタプリタ(ADRCI)の使い方を簡単にご説明しました。

▼ インシデントとは?

実は前回少しだけ触れたのですが、ORA-600 のようなクリティカルなエラー
が発生すると ADRでは「インシデント」という単位で管理されます。
インシデントとなるような場合は、アラート・ログに該当エラーメッセージ
が出力されると共に、トレース・ファイル等が出力されます。

▼ クリティカル・エラーとは?

インシデントとなるエラーについては、KROWN #126440 に記述がありますが
上に挙げた ORA-600 以外にも ORA-07445(OS例外)や ORA-04031(共有プール
のメモリー不足)などがあります。
この情報を読むと、Oracle社がどのようなエラーを重大としているかうかが
い知ることができ興味深いです。

▼ インシデントを発生させてみる!

任意のORAエラーを発生させるストアド・プロシージャ(PROC_EXCPT)を作
成してみました。

======================================================================
注意:本番環境などで実行すると混乱の原因となりますので、コードの全文は
公開しませんが、ヒントとして「pragma exception_init」というのを使うこ
とだけ紹介しておきます。

例:
err4031 exception;
pragma exception_init (err4031, -4031);
…………………………………
raise err4031;
======================================================================

実行例:共有メモリー割当失敗(ORA-4031)を発生させる(実際はさせたフリ)

SQL> execute PROC_EXCPT(4031);
BEGIN PROC_EXCPT(4031); END;

*
ERROR at line 1:
ORA-04031: unable to allocate  bytes of shared memory ("","","","")
ORA-06512: at "ADR_TEST.PROC_EXCPT", line 15
ORA-06512: at line 1

エラーが発生した時のアラート・ログは次のようになります。(ADRCIで確認)

.................................................................
2008-xx-xx xx:27:35.740000 +09:00
Errors in file /var/oracle/diag/rdbms/ora111d/ora111d/trace/ora111d_ora_25387.trc  (incident=56614):
ORA-04031: unable to allocate  bytes of shared memory ("","","","")
Incident details in: /var/oracle/diag/rdbms/ora111d/ora111d/incident/incdir_56614/ora111d_ora_25387_i56614.trc
2008-xx-xx xx:27:37.570000 +09:00
Trace dumping is performing id=[cdmp_20080602152737]
2008-xx-xx xx:27:38.974000 +09:00
Sweep Incident[56614]: completed
               ^^^^^
.................................................................

インシデントID(Incident[56614])というのが確認できます。

▼ インシデント一覧の表示

ADRCIからインシデント一覧を表示させることができます。

adrci> SHOW INCIDENT

ADR Home = /var/oracle/diag/rdbms/ora111d/ora111d:
*************************************************************************
INCIDENT_ID  PROBLEM_KEY        CREATE_TIME
------------ ------------------ ----------------------------------------
56614        ORA 4031           2008-xx-xx xx:27:35.740621 +09:00 ←
56613        ORA 600            2008-xx-xx xx:10:13.431071 +09:00
56612        ORA 700 [kgerev1]  2008-xx-xx xx:10:11.526567 +09:00
56580        ORA 4031           2008-xx-xx xx:04:03.638581 +09:00
52288        ORA 4030           2008-xx-xx xx:07:49.201133 +09:00
..................................................................

さらに、Incident[56614]を詳細に表示させるためには以下のようにします。

adrci> SHOW INCIDENT -MODE DETAIL -P "INCIDENT_ID=56614"

ADR Home = /var/oracle/diag/rdbms/ora111d/ora111d:
*************************************************************************

**********************************************************
INCIDENT INFO RECORD 1
**********************************************************
   INCIDENT_ID                   56614
   STATUS                        ready
   CREATE_TIME                   2008-xx-xx xx:27:35.740621 +09:00
   PROBLEM_ID                    1
   CLOSE_TIME                    
   FLOOD_CONTROLLED              none
   ERROR_FACILITY                ORA
   ERROR_NUMBER                  4031
   ERROR_ARG1                    
    (中略)
   ERROR_ARG8                    
   SIGNALLING_COMPONENT          
   SIGNALLING_SUBCOMPONENT       
   SUSPECT_COMPONENT             
   SUSPECT_SUBCOMPONENT          
   ECID                          
   IMPACTS                       0
   PROBLEM_KEY                   ORA 4031
   FIRST_INCIDENT                633
   FIRSTINC_TIME                 2008-03-19 19:27:43.675205 +09:00
   LAST_INCIDENT                 56614
   LASTINC_TIME                  2008-xx-xx xx:27:35.740621 +09:00
   IMPACT1                       34668547
   IMPACT2                       34668546
   IMPACT3                       0
   IMPACT4                       0
   KEY_NAME                      ProcId
   KEY_VALUE                     37.38
   KEY_NAME                      PQ
   KEY_VALUE                     (16777217, 1212388054)
   KEY_NAME                      SID
   KEY_VALUE                     65.28540
   KEY_NAME                      Client ProcId
   KEY_VALUE                     oracle@server132 (TNS V1-V3).25387_46912511425632
   OWNER_ID                      1
   INCIDENT_FILE                 /var/oracle/diag/rdbms/ora111d/ora111d/incident/incdir_56614/ora111d_ora_25387_i56614.trc
   OWNER_ID                      1
   INCIDENT_FILE                 /var/oracle/diag/rdbms/ora111d/ora111d/trace/ora111d_ora_25387.trc
1 rows fetched

▼ インシデント・パッケージング・サービス(IPS)とは?

障害の発生原因について Oracleサポートに分析を依頼する場合、アラート・
ログや該当するトレース・ファイルを送らなければならないことがよくありま
す。
この場合

1. アラート・ログの場所を確認する
2. アラート・ログの障害発生に関する部分を確認する
3. 関連するトレース・ファイル等が出力されていないか確認する
4. トレース・ファイル等を送付する

というような作業を行わなければなりません。
これらに要する時間は、Oracleの経験によって個人差が大きいのではないか
と思います。

インシデント・パッケージング・サービス(IPS)とは、必要な情報を、簡
単な操作で ZIPファイルにパッケージ化することができる機能です。

IPS(機能)は ADRCIから利用することができます。

▼ 論理インシデント・パッケージの作成

あるインシデントに基づく診断データ(第1回参照)の情報をまとめたもの
を論理インシデント・パッケージと呼びます。
論理パッケージは実体がなく、最終的な ZIPファイルを作るための情報で
す。

Incident[56614]に基づく論理インシデント・パッケージは、以下の要領で
作成します。

  adrci> IPS CREATE PACKAGE INCIDENT 56614  ←インシデント番号を指定
  Created package 2 based on incident id 56614, correlation level typical
                 ^^

このパッケージ番号「2」は IPSにより自動的に採番されますが、次のステッ
プで必要になるので、メモっておきましょう。

▼ 物理インシデント・パッケージの生成

以下の要領で、論理インシデント・パッケージから物理インシデント・パッ
ケージを生成し、最終的な ZIPファイルを作ります。
生成先のディレクトリを指定する必要があるので、ここでは /var/oracle
を指定します。

  adrci> IPS GENERATE PACKAGE 2 IN /var/oracle
                             ^^パッケージ番号を指定

  Generated package 2 in file /var/oracle/ORA4031_2008xxxxxx5152_COM_1.zip, mode complete

ファイル名は __.zip となります。

・PackageName:問題キー(この場合 ORA-4031)の一部とタイムスタンプの組
               み合わせになります。
・Mode       :COM(完全)または INC(増分)のいずれかです。(詳細は
               「11g ユーティリティ」のマニュアルを参照してください。)
・Seq        :順序番号

Oracleサポートにはこのファイルを送るだけでよいのです。

▼ 物理インシデント・パッケージの内容

物理インシデント・パッケージを解凍し、内容を確認してみましょう。

  ORA4031_2008xxxxxx5152_COM_1.zip
  ↓解凍結果
  diag
  
  ./diag:
  rdbms
  
  ./diag/rdbms:
  ora111d
  
  ./diag/rdbms/ora111d:
  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/incident:
  incdir_56614  ← Incident[56614]のディレクトリ
  
  ./diag/rdbms/ora111d/ora111d/incident/incdir_56614:
  ora111d_ora_25387_i56614.trc  ora111d_ora_25387_i56614.trm
  
  ./diag/rdbms/ora111d/ora111d/incpkg:
  pkg_2  ← パッケージ番号=2 のディレクトリ
  
  ./diag/rdbms/ora111d/ora111d/incpkg/pkg_2:
  seq_1  ← 順序番号=1 のディレクトリ
  
★./diag/rdbms/ora111d/ora111d/incpkg/pkg_2/seq_1:
  manifest_2_1.html  manifest_2_1.txt  manifest_2_1.xml  metadata.xml
  (その他省略)
  
  ./diag/rdbms/ora111d/ora111d/ir:
  (省略)
  
  ./diag/rdbms/ora111d/ora111d/trace:
  alert_ora111d.log  ← 下位互換性のための従来型アラート・ログ
  ora111d_ora_25387_i56614.trc  ora111d_ora_25387_i56614.trm
  (その他トレース・ファイル多数)

  注目は★のディレクトリ配下にある、manifest_2_1.* です。

  試しに
  ./diag/rdbms/ora111d/ora111d/incpkg/pkg_2/seq_1/manifest_2_1.txt
  の中を見てみましょう。
======================================
  Manifest for package 2
  
  Manifest details
  ------------------------------------------------------
  | Package ID     | 2                                 |
  ------------------------------------------------------
  | Creation time  | 2008-xx-xx xx:51:52.781809 +09:00 |
  ------------------------------------------------------
  | Archive time   | 2008-xx-xx xx:59:13.809799 +09:00 |
  ------------------------------------------------------
  | Sequence       | 1                                 |
  ------------------------------------------------------
  | Package mode   | Complete                          |
  ------------------------------------------------------
  | Package status | Generating                        |
  ------------------------------------------------------
  | Package flags  | Flags: (No flags set)             |
  ------------------------------------------------------
  (中略)
  Files
  -----------------------------------------------------------------------------
  | File name           | Location            | Size    | File time           |
  -----------------------------------------------------------------------------
  | ora111d_ora_25387_i | /incident | 5374446 | 2008-06-02          |
  | 56614.trc           | /incdir_56614       |         | 15:27:37.000000     |
  |                     |                     |         | +09:00              |
  -----------------------------------------------------------------------------
  | ora111d_ora_25387_i | /incident | 24633   | 2008-06-02          |
  | 56614.trm           | /incdir_56614       |         | 15:27:37.000000     |
  |                     |                     |         | +09:00              |
  (後略)

======================================

物理インシデント・パッケージの内容をまとめた manifest(管理票)となっ
ています。
manifest_2_1.html、manifest_2_1.xml にも同様の情報が記載されています。

いかがでしょうか。このように ADRCI の ISP機能を使えば、面倒なトレー
ス・ファイルの収集や圧縮を非常に簡単に行うことができます。

来週は最終回です。今までのおさらいと、ADR によってどれくらい運用が効
率化できるかを考察してみます。

今日はここまで。

関東地方は梅雨入りしたらしい
恵比寿より