おらくるのいる生活

OracleのDBAとしての、障害対応やらパフォーマンス・チューニングやらの日々を綴っています

アラートログ、トレースファイルにテストメッセージを出力する方法

DBシステムを保守・運用する際、アラートログを監視してエラー検知する事があります。

検知の仕組みは様々ですが、仕組みを導入する際、正常に検知できるかテストする必要がありますよね。

アラートログにテストメッセージを出力させる簡単な方法についてまとめてみました。

方法その1

実際にエラーを発生させます。

DBに影響を及ぼさず、なおかつアラートログにエラー出力されるようなエラーを故意に発生させます。

例えば、以下の通りです。

SQL> create tablespace system datafile size 100M;
create tablespace system datafile size 100M
*
行1でエラーが発生しました。:
ORA-01543: 表領域'SYSTEM'はすでに存在します

アラートログを見てみます。

2021-04-01T13:28:52.052395+09:00
create tablespace system datafile size 100M
ORA-1543 signalled during: create tablespace system datafile size 100M...

 

方法その2

dbms_system.ksdwrt プロシージャを使用する。

SQL> exec dbms_system.ksdwrt(3,'ORA-0000 test');

PL/SQLプロシージャが正常に完了しました。

第1引数の意味は下記の通りです。

1 : トレースファイルに書き込み
2 : alert.log に書き込み
3 : alert, trace 両方に書き込み

上記の例では3を指定したので、アラートログ、トレースファイル共に出力されています。また、トレースファイルはsqlplusを実行したサーバープロセスのトレースになります。

アラートログ出力

2021-04-01T13:24:34.964152+09:00
ORA-0000 test

トレースファイル出力

Trace file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_20458.trc
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.9.0.0.0
Build label: RDBMS_19.9.0.0.0DBRU_LINUX.X64_200930
ORACLE_HOME: /u01/app/oracle/product/19.0.0/dbhome_1
System name: Linux
Node name: test
Release: 4.1.12-112.16.4.el7uek.x86_64
Version: #2 SMP Mon Mar 12 23:57:12 PDT 2018
Machine: x86_64
VM name: Xen Version: 4.4 (HVM)
Instance name: orcl
Redo thread mounted by this instance: 1
Oracle process number: 64
Unix process pid: 20458, image: oracle@test (TNS V1-V3)


*** 2021-04-01T13:46:00.126585+09:00
*** SESSION ID:(41.24251) 2021-04-01T13:46:00.126623+09:00
*** CLIENT ID:() 2021-04-01T13:46:00.126642+09:00
*** SERVICE NAME:(SYS$USERS) 2021-04-01T13:46:00.126653+09:00
*** MODULE NAME:(sqlplus@test (TNS V1-V3)) 2021-04-01T13:46:00.126664+09:00
*** ACTION NAME:() 2021-04-01T13:46:00.126678+09:00
*** CLIENT DRIVER:(SQL*PLUS) 2021-04-01T13:46:00.126707+09:00

ORA-0000 test

 

少なくとも11.2と19cでは使用できました。

アラートログのエラー検知だけでなく、トレースファイルのエラー検知テストもしたい時には便利ですね。

出力させるメッセージは「ORA-xxx」に限らず任意なので、「Failure」「Warning」なども検知テストしたい時にも使い勝手が良さそうです。