Attention Log を試す（Oracle Database 21c)

Oracle Database 21c に追加された Attention Log について検証しました。

# Attention Log とは
Attention Log （日本語マニュアルでは「注意ログ」）は、Oracle Database インスタンスの稼働に影響する事象が書き込まれるログファイルです。Oracle Database 21cから追加されました。

# 場所とフォーマット
Attention Log はテキストファイルで、ADR 内の trace ディレクトリ（alertファイルと同じ場所）に、attention_{db_name}.log として作成されます。ファイル名は V$DIAG_INFO ビューからも確認できます。PDB からも同じパスで参照できます。

```SQL:
SQL> SELECT name, value FROM V$DIAG_INFO WHERE name='Attention Log';

NAME                 VALUE
-------------------- --------------------------------------------------------------------------------
Attention Log        /u01/app/oracle/diag/rdbms/o21c/O21C/trace/attention_O21C.log

SQL> EXIT
$
$ ls -l /u01/app/oracle/diag/rdbms/o21c/O21C/trace/attention_O21C.log
-rw-r----- 1 oracle oinstall 13913 Dec 13 12:52 /u01/app/oracle/diag/rdbms/o21c/O21C/trace/attention_O21C.log
$
```

# ファイルの内容

Attention Log は JSON 形式で出力されます。以下の項目が出力されます。

|項目名|内容|備考|
|:---|:---|:---|
|レベル|メッセージの緊急度に応じて変化する|ERROR, NOTIFICATION など|
|URGENCY|緊急度||
|INFO|追加メッセージ||
|CAUSE|原因となる情報メッセージ||
|ACTION|取るべきアクション||
|CLASS|発生クラス||
|TIME|発生時刻||
|

以下はインスタンス起動時も出力された実際のログです。

```JSON:
{
  "NOTIFICATION" : "Starting ORACLE instance (normal) (OS id: 343598)",
  "URGENCY"      : "INFO",
  "INFO"         : "Additional Information Not Available",
  "CAUSE"        : "A command to startup the instance was executed",
  "ACTION"       : "Check alert log for progress and completion of command",
  "CLASS"        : "CDB Instance / CDB ADMINISTRATOR / AL-1000",
  "TIME"         : "2021-12-13T12:52:00.355+09:00"
}
```

PMONプロセスを強制的に停止した場合のログは以下の通りです。インスタンス起動時の先頭の項目名「NOTIFICATION」が、障害時には「ERROR」になっていることがわかります。

```JSON:実際の出力
{
  "ERROR"        : "PSP0 (ospid: 125939): terminating the instance due to ORA error 472",
  "URGENCY"      : "IMMEDIATE",
  "INFO"         : "Additional Information Not Available",
  "CAUSE"        : "The instance termination routine was called",
  "ACTION"       : "Check alert log for more information relating to instance termination rectify the error and restart the instance",
  "CLASS"        : "CDB Instance / CDB ADMINISTRATOR / AL-1003",
  "TIME"         : "2021-12-13T12:21:39.966+09:00"
}
```

[マニュアル](https://docs.oracle.com/cd/F39414_01/admin/diagnosing-and-resolving-problems.html#GUID-633CC0D9-8FA8-4D98-8BE2-967D1CBEE266) の表記は以下の通りですが、PMONプロセスが異常終了した場合のエラー・レベルもフォーマットも異なります。監視を行う場合は実際に出力される文字列を精査することをお勧めします。マニュアルには項目として Scope、Attention ID 等も出力されると記述がありますが、実際には出力されていないようです。

```JSON:マニュアルの表記
{
IMMEDIATE : "PMON (ospid: 3565): terminating the instance due to ORA error 822" 
CAUSE: "PMON detected fatal background process death"
ACTION: "Termination of fatal background is not recommended, Investigate cause of process termination"
CLASS : CDB-INSTANCE / CDB_ADMIN / ERROR / DBAL-35782660
TIME : 2020-03-28T14:15:16.159-07:00
INFO : "Some additional data on error PMON error"
}
```

# ビューからの参照
Attention Log のみを参照するビューは提供されていないようです。[マニュアル](https://docs.oracle.com/cd/F39414_01/admin/diagnosing-and-resolving-problems.html#GUID-4A484D86-ED31-45CE-AECE-4384882A5A7A) には V\$DIAG_ALERT_EXT を参照するように書かれていますが、この[ビュー](https://docs.oracle.com/cd/F39414_01/refrn/V-DIAG_ALERT_EXT.html#GUID-7EC93FE0-FF30-4A94-92BC-785E2BCB38F3) は ADR の XML ログを参照しています。V\$DIAG_ALERT_EXT ビューは Oracle Database 12c から利用でき、Oracle Database 19c で大きく列構成が変更されています。

# 出力される事象
 Attention Log にはインスタンスの状態が変化する事象が出力されるようです。マニュアルには以下のように表記されています。

>注意ログは、重要で可視性の高いデータベース・イベントに関する情報を含む、構造化された外部で変更可能なファイルです。注意ログを使用すると、
>アクションが必要な重要なイベントに関する情報にすばやくアクセスできます。

例えば表領域が拡張できないといったインスタンスの稼働に影響がないエラーは Attention Log には出力されません。このため Oracle Database の稼働を Attention Log だけで監視することはお勧めできません。