連載
» 2008年06月30日 00時00分 公開

Oracleトラブル対策の基礎知識(1):Oracle運用の基本「ログ」を理解しよう (3/3)

[馬場昌弘,株式会社コーソル]
前のページへ 1|2|3       

障害が発生した瞬間の状況を記録するトレースファイル

 トレースファイルは、エラーなどの発生状況をより詳細に記録したファイルです。

 Oracleのプロセスがエラーを検知もしくは異常終了した際に、プロセスがその発生した状況を詳細に記録したトレースファイルを生成し、障害の原因を特定するための有益な情報を出力します。

 例えば、Windows環境上でサーバプロセスが異常終了した場合には、初期化パラメータのuser_dump_destで指定されたディレクトリに、以下のような名称のトレースファイルが生成されます。

<SID>_ora_<process_id>.trc

 バックグラウンドプロセスのトレースファイルは、background_dump_destで指定されたディレクトリに出力されます。

<SID>_<プロセス名>_<process_id>.trc
※<プロセス名>にはpmonやlgwrなどが入ります

 このようにトレースファイルには各プロセス名が含まれるので、ファイル名からどのプロセスのトレースであるかを判断できます。

 トレースファイルには、エラーが発生した際だけでなく、SQL_TRACEなどの診断イベントを設定した場合に出力される情報についても記録されます。診断イベントを使用した場合でも同様です。

 なお、トレースファイルは各プロセスと1対1で対応しています。プロセス稼働中に対応するファイルを移動したり削除すると、その操作以降の情報が出力されなくなりますので、注意が必要です。

・トレースファイルは最大ファイルサイズを指定できる

 アラート・ログのファイルサイズは制限することはできませんが、トレースファイルは初期化パラメータの「MAX_DUMP_FILE_SIZE」で最大サイズを制限することが可能です。

 しかし、ディスクの空き領域に問題がない限り、トレースファイルのサイズに制限をかけることはお勧めできません。サイズ制限を設定することにより重要な情報が出力されない恐れがあり、そのため、エラー発生時の情報が欠落して、原因追求できなくなってしまう可能性があるからです。

 トレースファイルの内容については、トレースの出力対象となるプロセスや出力のトリガにより異なりますが、通常以下の基本情報をヘッダに出力します。

-トレースファイル名
-トレースファイルが作成されたタイムスタンプ
-OSとそのバージョン情報
-Oracleのバージョンとインストールされているオプション
-インスタンス名
-プロセスIDなど

Dump file e:\oracle\admin\db102as\udump\db102as_ora_5740.trc
Thu Mar 27 09:39:04 2008
ORACLE V10.2.0.1.0 - Production vsnsta=0
vsnsql=14 vsnxtr=3
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Windows XP Version V5.1 Service Pack 2
CPU                 : 2 - type 586
Process Affinity    : 0x00000000
Memory (Avail/Total): Ph:113M/1014M, Ph+PgF:953M/2441M, VA:1563M/2047M
Instance name: db102as
Redo thread mounted by this instance: 1
Oracle process number: 19
Windows thread id: 5740, image: ORACLE.EXE (SHAD)
リスト4 Windows環境のR10.2.0.1でのTrace Headerの例

 アラート・ログでも起動時にOSとそのバージョン情報などが出力されますが、トレースファイルでも同様の情報が出力されるため、トレース情報を確認する場合はわざわざアラート・ログの情報を見直す必要はありません。

 なお、ヘッダ以下に出力される情報については、そのトレースが出力されるトリガとなる処理によって変化しますが、内部エラーなどの理由でトレースファイルが出力される場合には、以下の情報も併せて出力されます。

- エラーコード
- エラーが発生した際に実行していたSQL(Current SQL)
- スタックトレース

*** 2008-06-10 13:53:56.218
ksedmp: internal or fatal error
ORA-00600: 内部エラー・コード、引数: [kkfi.qbcvfr],[1],[],[],[],[],[],[]
Current SQL statement for this session:
create or replace view v2
as select v1.rowid row_id, v1.sc
from v1
----- Call Stack Trace -----
calling              call     entry                argument values in hex      
location             type     point                (? means dubious value)     
-------------------- -------- -------------------- ----------------------------
_ksedst+38           CALLrel  _ksedst1+0           0 1
_ksedmp+898          CALLrel  _ksedst+0            0
_ksfdmp+14           CALLrel  _ksedmp+0            3
_kgerinv+140         CALLreg  00000000             98ACE90 3
_kgeasnmierr+19      CALLrel  _kgerinv+0           98ACE90 8590020 3692300 1
                                                   BFCC114
_kkfiqs+561          CALLrel  _kgeasnmierr+0       98ACE90 8590020 3692300 1 0 1
                                                   0
_kkfiis1+59          CALLrel  _kkfiqs+0            4D8D8EC 4D864C4 4D8744C
                                                   BFCC1E4
_kkfiis+185          CALLrel  _kkfiis1+0           4D87BE4 4D8744C BFCC1E4
_opixmf+48           CALLreg  00000000             4D87BE4 BFCC1E4
_opixmf+184          CALLrel  _opixmf+0            4D8D8EC 173C3E0 BFCC1E4
_kkfiGetCand+45      CALLrel  _opixmf+0            4D8E000 173C3E0 BFCC1E4
_opitca+1226         CALLrel  _kkfiGetCand+0       4D8E000
_kksLoadChild+5750   CALLrel  _opitca+0            85AA794 4D8E538
_kkslod+98           CALLrel  _kksLoadChild+0      98ACE90 4D8EF84 BFCD3C4
_kglobpc+446         CALLreg  00000000             98ACE90 4D8EF84 BFCD3C4
 : 
 : 
リスト5 Trace Stackの例

・障害発生時のクエリ内容の確認

エラー発生時のトレースファイルについては、問題発生時のSQL文が確認できるので、検証環境で同様のSQL文を実行し、再現テストを実施する場合の情報としても役立ちます。

・メモリダンプの情報の解析はサポート側で

スタックトレースは、プロセスがクラッシュする前にそのプロセスで呼び出された関数をスタック順に出力したものです。これらの情報については、オラクルのサポートで解析調査を行うために使用されるものです。詳細な内容は一般公開されておらず、この内容をユーザーサイドで解析することはできません。

・複数の内部エラー発生時に問題にアタリを付ける

内部エラーを意味するORA-600などが複数発生した場合、各ORA-600の引数および出力されているスタックトレースを確認します。SQL文が異なる場合でも、引数とスタックの内容が似ている場合には、同様の原因に起因して発生している可能性が高いと判断できます。

・公開情報を参照して解決する

オラクルが提供しているOracle Internet Support Center(通称:Oisc)やMetalinkでは、既存の不具合情報などを公開しています。これらの情報を参照するには、別途サポート契約が必要ですが、出力されているスタック情報を基に、該当しているかどうかの判断のアナウンスを行っている場合がありますので、自己解決の大きな手助けとなります。


 データベースの運用管理では、これらのファイルの監視は必須の作業です。これから新たにデータベースの運用管理をする方は、本稿を日々の業務に役立ててください。

 今回は主にOracle Database 10gでのログ情報を中心に紹介しました。現行の最新バージョンである11gでは、XMLベースでログ情報を取得できるようになっています。次回は11gのAutomatic Diagnostic Repository(ADR)について解説していきます。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。