RDS for Oracle (12.2以降) のリスナーログに関する注意点

RDS for Oracle(12.2以降)のリスナーログに関する注意点をまとめてみました。listenerlogビューから確認する方法は、12.2以降で使用できなくなるため、CloudWatch Logsから確認する方法を検討しましょう。
2020.11.30

こんにちは。オペレーション部の西澤です。

オンプレでログの内容を確認する時は、DBサーバーにログインしてOSコマンドでみたり、ローカル環境にダウンロードしたりすると思います。 しかし、RDSではこれらの方法が使えません。RDSを初めて操作する時、この違いに驚かれる方も多いのではないでしょうか。(私はそうでした)

今回は、その中でもRDS for Oracle (12.2以降)のリスナーログにおける注意点について書いてみます。

listenerlogビューから確認する方法

インターネットで雑に検索(例:rds oracle リスナーログ)すると、ドキュメント以外ではだいたいこの方法がヒットします。 確かに、listenerlogビューのmessage_text列をselectすることでリスナーログの内容は確認できます。 ただ、message_text列のタイムスタンプがUTCで見づらかったり、SQL*Plusから検索する必要があるなど、面倒な点が多いと思います。

SQL> select message_text from listenerlog;

MESSAGE_TEXT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
29-NOV-2020 03:17:40 * service_register * ORCL * 0
29-NOV-2020 03:17:41 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=rdshm))(SID=ORCL)(SERVER=DEDICATED)) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxxxxxxx)(PORT=yyyyy)) * establish * ORCL * 0
29-NOV-2020 03:17:47 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=rdshm))(SID=ORCL)(SERVER=DEDICATED)) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxxxxxxx)(PORT=yyyyy)) * establish * ORCL * 0
29-NOV-2020 03:17:56 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=rdshm))(SID=ORCL)(SERVER=DEDICATED)) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxxxxxxx)(PORT=yyyyy)) * establish * ORCL * 0
29-NOV-2020 03:17:57 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=rdshm))(SID=ORCL)(SERVER=DEDICATED)) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxxxxxxx)(PORT=yyyyy)) * establish * ORCL * 0
29-NOV-2020 03:17:59 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=rdshm))(SID=ORCL)(SERVER=DEDICATED)) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxxxxxxx)(PORT=yyyyy)) * establish * ORCL * 0
29-NOV-2020 03:17:59 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=rdshm))(SID=ORCL)(SERVER=DEDICATED)) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxxxxxxx)(PORT=yyyyy)) * establish * ORCL * 0
29-NOV-2020 03:18:00 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=rdshm))(SID=ORCL)(SERVER=DEDICATED)) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxxxxxxx)(PORT=yyyyy)) * establish * ORCL * 0
29-NOV-2020 03:18:01 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=rdshm))(SID=ORCL)(SERVER=DEDICATED)) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxxxxxxx)(PORT=yyyyy)) * establish * ORCL * 0
 :

しかし、この方法は12.2以降で使えません。ドキュメントをみてみましょう。

Oracle Database バージョン 12.2.0.1 以降の場合は、Amazon CloudWatch Logs を使用してリスナーログにアクセスします。

なお、AWSからアナウンスされている通り、11.2.0.4のサポート終了によって、Databaseのアップグレードを検討しているシステムは多いかと思います。そのため、12.2より前のバージョンをお使いで、かつlistenerlogビューを確認されていた方はこの点にご注意ください。

Amazon RDS for Oracle バージョン 12.2.0.1と11.2.0.4のサポート終了のお知らせ | Amazon Web Services ブログ

[補足]
12.2以降でもlistenerlogビュー自体は残っています。selectも可能ですが、中身は空です。

SQL> select version from v$instance;

VERSION
-----------------
19.0.0.0.0

SQL> select count(*) from listenerlog;

COUNT(*)
----------
       0
では、続きまして、もう一つの方法です。

CloudWatch Logsから確認する方法

現在、CloudWatch Logsから確認できるログはリスナーログを含め、アラートとトレース、監査の4種類です。 設定方法については、下記ブログで詳細に説明されていますので、こちらをご覧ください。

[新機能] RDS for Oracle が CloudWatch Logs へのログ出力をサポートしました | Developers.IO

なお、Databaseの作成時、「ログのエクスポート」はデフォルトでチェックが入っていないのでご注意ください。※Database作成後の変更は可能です。

以上です。