Oracleデータベースのアラートログ完全ガイド

ADR(自動診断リポジトリ)

アラートログは oracle の稼働状況・障害の“時系列記録”です。アラートログを素早く読めると、原因切り分けと一次対応の速度が段違いになります。本稿では場所と見方、代表的な確認コマンド、よくあるエラーの読み方、保守までを初心者にも分かる解説つきで整理します。

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?


アラートログとは?(役割と出力場所)

  • 役割:インスタンスの起動/停止、構成変更、バックグラウンド異常、ORA-エラーの要所を記録
  • 保存先:ADR(Automatic Diagnostic Repository)配下
$ORACLE_BASE/
└─ diag/
   └─ rdbms/
      └─ <db_unique_name>/
         └─ <instance_name>/
            ├─ alert/   ← XML形式(log.xml)
            └─ trace/   ← テキスト形式:alert_<db_unique_name>.log

ファイル名は多くの環境で alert_<DB_UNIQUE_NAME>.log(単一構成ではSIDと同じに見える場合あり)。


【oracle 19c】アラートログの場所と構造をすぐ確認

1) OS(Oracle Linux 7.9)で直接見る

# 例:パスをそのまま指定(置き換えてください)
tail -f /u01/app/oracle/diag/rdbms/ORCL/ORCL/trace/alert_ORCL.log

# 直近の ORA- を10行ずつ確認
grep -n "ORA-" /u01/app/oracle/diag/rdbms/ORCL/ORCL/trace/alert_ORCL.log | tail -n 10

ポイント解説

  • tail -f は追尾表示(リアルタイム監視)。CTRL+Cで停止。
  • grep -n "ORA-" でエラー行を抽出。直前の時間行と併せて前後を読むと変化点が掴めます。

2) SQL*Plusで「場所」を機械的に把握(V$DIAG_INFO)

-- 管理者権限(SYSDBA など)で
COL name  FORMAT A20
COL value FORMAT A100
SELECT name, value
FROM   v$diag_info
WHERE  name IN ('ADR Base','ADR Home','Diag Alert','Diag Trace','Default Trace File')
ORDER  BY name;

初心者向け解説

  • V$DIAG_INFO は診断関連ディレクトリの正確なパスを返します。
    • ADR Base … ADRの基点
    • ADR Home … 当該DBインスタンスの診断ホーム
    • Diag Alert … アラートログ(XML)のディレクトリ
    • Diag Trace … テキスト版アラートログと各種トレースの置き場
    • Default Trace File … 自セッションのトレースファイル

3) SQLでアラートログ本文を読む(19c:V$DIAG_ALERT_EXT)

12.2以降は V$DIAG_ALERT_EXT からアラートログ相当を直接検索できます。フィルタや並び替えが容易です。
(出力はXML版ログの内容をテーブル化したもの)

-- 直近24時間のアラートログを時系列で
COL originating_timestamp FORMAT A30
COL message_text FORMAT A100 WORD_WRAPPED
SELECT originating_timestamp, message_text
FROM   v$diag_alert_ext
WHERE  originating_timestamp > SYSTIMESTAMP - INTERVAL '1' DAY
ORDER  BY originating_timestamp;

解説

  • originating_timestamp … 発生時刻
  • message_text … メッセージ本文(ORA- で始まる行など)

エラーだけ欲しい場合

SELECT originating_timestamp, message_text
FROM   v$diag_alert_ext
WHERE  message_text LIKE 'ORA-%'
ORDER  BY originating_timestamp DESC
FETCH FIRST 50 ROWS ONLY;

4) ADRCIで高度に検索・追尾(公式ユーティリティ)

adrci
ADRCI> show homes
ADRCI> set homepath diag/rdbms/ORCL/ORCL     -- 目的のホームを選択
ADRCI> show alert -tail -f                     -- 追尾表示(CTRL+Cで停止)

フィルタ例(ORA-600系だけ)

ADRCI> show alert -p "MESSAGE_TEXT LIKE '%ORA-600%'" -term

スプール保存

ADRCI> spool /tmp/my_alert.log
ADRCI> show alert -term
ADRCI> spool off

show alert のフィルタや追尾オプションは公式ドキュメントにも明記されています(-p / -tail / -f / -term など)。


よくあるメッセージの読み方と一次対応の勘所

現場では前後のログ直近の変更を必ずセットで確認します。ここでは“読み方の軸”を示します(実施判断は環境・要件に応じて)。

ORA-01555: スナップショットが古すぎます

  • 何が起きた? 一貫性読み取り(SELECT)のための過去イメージが UNDO から消えてしまった。
  • 読み方の軸:長時間SELECTやバッチ、同時更新の多さ/UNDO_RETENTION と表領域サイズの釣り合い
  • 見るSQL(現状把握) -- UNDO表領域の情報 SELECT tablespace_name, status, contents FROM dba_tablespaces WHERE contents = 'UNDO'; -- UNDO使用状況(代表例) SELECT name, value FROM v$parameter WHERE name LIKE 'undo%';
  • 提案:クエリの分割・不要ソート削減、UNDO表領域サイズの見直し、UNDO_RETENTION の整合。影響評価と戻し方を準備してから実施。

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

ORA-00060: リソース待機の間にデッドロックが検出されました。

  • 何が起きた? 相互待ち(循環待ち)で自動的に一方がロールバック。
  • 読み方の軸該当セッションのトレースファイルに“deadlock graph”。更新順序やインデックス設計の見直し。
  • 確認の導線 -- 自セッションのトレースファイル位置(Default Trace File) SELECT value AS default_trace_file FROM v$diag_info WHERE name = 'Default Trace File';
  • 提案:更新順序の統一、WHERE句の選択性向上、アプリ側のリトライ実装(指数バックオフなど)。

ORA-00257:アーカイブ・エラーです。

  • 何が起きた? FRA(Fast Recovery Area)満杯でアーカイブ生成停止。
  • 現状把握SQL -- FRA使用率 SELECT name, space_limit/1024/1024 AS mb_limit, space_used/1024/1024 AS mb_used, space_reclaimable/1024/1024 AS mb_reclaimable FROM v$recovery_file_dest; -- 内訳(どの種別が使っているか) SELECT file_type, percent_space_used, percent_space_reclaimable FROM v$flash_recovery_area_usage ORDER BY percent_space_used DESC;
  • 提案:古いアーカイブやバックアップの削除(RMANで)、FRA拡張、アーカイブ抑制(業務・DR要件を満たす範囲で)。運用方針と復旧性のバランスを確認してから。

起動・構成変更メッセージの“流れを掴む”

[起動時の典型]
Starting ORACLE instance
 → Database mounted.
 → Database opened.

[構成変更例]
ALTER SYSTEM SET ...
Tablespace ... added.
Switch logfile ...

読み方のコツ

  • “直前の出来事”を探す:起動直後/ログ切替直後/表領域拡張直後にエラーが出ていないか。
  • 繰り返し:同じ警告が一定間隔で続いていればリソース不足や設定不整合のサイン。

トレースファイルの出力と管理

  • 出力先Diag TraceV$DIAG_INFOで確認)
  • 関連例*_ora_<pid>.trc(プロセス個別)、*_ora_<pid>.trm(メタ)
  • ADRCIで検索 adrci ADRCI> set homepath diag/rdbms/ORCL/ORCL ADRCI> show tracefile -t "last" -- 直近のトレースを素早く確認
  • サイズ管理(自動/手動)
    • 自動ポリシー:SET CONTROL(サイズや保持の方針を設定)
    • 手動パージ(単位は分): ADRCI> purge -age 10080 -type ALERT -- 7日より古いアラートログ関連を対象 ADRCI> purge -age 43200 -type TRACE -- 30日より古いトレースを対象
    • Linux側でのローテーションを併用する場合は、運用チームの合意復旧手順を必ず整備。

すぐ使える“日々の点検レシピ”

# 1) 直近の重大系(ORA-00600/07445)を確認
adrci exec="set homepath diag/rdbms/ORCL/ORCL; show alert -p \"message_text like '%ORA-600%' or message_text like '%ORA-7445%'\" -term"

# 2) 過去24時間のORA-の件数を概観(SQL)
sqlplus -s / as sysdba <<'SQL'
SET PAGES 100 LINES 200
SELECT TO_CHAR(originating_timestamp, 'YYYY-MM-DD HH24:MI') AS ts,
       COUNT(*) AS cnt
FROM   v$diag_alert_ext
WHERE  message_text LIKE 'ORA-%'
AND    originating_timestamp > SYSTIMESTAMP - INTERVAL '1' DAY
GROUP  BY TO_CHAR(originating_timestamp, 'YYYY-MM-DD HH24:MI')
ORDER  BY ts;
SQL

解説

  • ① は致命系エラーの有無を短時間で判断。
  • ② は“時間帯偏り”を可視化し、バッチ・ピーク時間の問題を当てにいきます。

まとめ(現場目線の読み方)

  • まず「場所」を確実に特定V$DIAG_INFO / ディレクトリ構造)。
  • 読む順番は「変化点 → エラー → 周辺ログ」。
  • ADRCI/SQL/OS を使い分け、再現可能な手順で共有する。
  • 保守は ポリシー(自動)+定期パージ(手動) の組み合わせが安全。

本記事は Oracle Database 19c を対象に解説します(他バージョンは画面や既定値が異なる場合があります)。


[参考]
データベース・エラー・メッセージ

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

コメント

タイトルとURLをコピーしました