Das Plugin check_oracle_health für das Icinga2 Monitoring-System ist als Perl-Script implementiert. Nachdem mit der Installation von Oracle 19c ein fertiges Perl mit DBI und DBD::Oracle mitkommt, liegt es nahe dieses Perl für das check_oracle_health Plugin zu verwenden. Dementsprechend haben wir das Plugin wie folgt gebaut:
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
cd check_oracle_health-3.2.1.8
./configure --with-nagios-user=icinga --with-nagios-group=icinga --with-perl=$ORACLE_HOME/perl/bin/perl
make
make install
Leider führt uns das nicht zum gewünschten Ergebnis:
# ./check_oracle_health --connect=mydb --username=monusr --password=monpw --mode=rman-backup-problems --environment=ORACLE_HOME=$ORACLE_HOME \
--environment=LD_LIBRARY_PATH=$ORACLE_HOME/lib
OK - rman had 0 problems during the last 3 days | rman_backup_problems=0;1;2
Segmentation fault (core dumped)
Analyse
Unabhängig von Oracle Version und Patchsstand läuft der Check durch, beendet sich aber mit einem Core-Dump und ist somit nicht verwendbar.
Dies haben wir mit folgenden Oracle Installationen verifiziert:
- Oracle Client 19.3 - ungepatched
- Oracle Client 19.14
- Oracle Databank Home 19.13
Lösung des Problems für alle Oracle Datenbank Versionen
Wir verwenden das System-Perl und installieren dort die aktuelle Version von DBD::Oracle:
# yum install perl-DBI
# yum install perl-CPAN
# cpan
cpan[1]> get DBD::Oracle
cpan[2]> exit
# cd .cpan/build/DBD-Oracle-1.83-yH5i6q/
# export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
# export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
# perl Makefile.PL
# make
# make install
So ausgerüstet können wir das check_oracle_health plugin erneut bauen. Dieses Mal lassen wir den with-perl switch weg, damit wird das system-weite Perl verwendet:
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
cd check_oracle_health-3.2.1.8
./configure --with-nagios-user=icinga --with-nagios-group=icinga
make
make install
Jetzt funktioniert der check ohne Core-Dump:
# ./check_oracle_health --connect=mydb --username=monusr --password=monpw --mode=rman-backup-problems --environment=ORACLE_HOME=$ORACLE_HOME \
--environment=LD_LIBRARY_PATH=$ORACLE_HOME/lib
OK - rman had 0 problems during the last 3 days | rman_backup_problems=0;1;2
Wahrscheinliche Ursache
Im Perl aus dem Oracle Home ist DBD::Oracle in der Version 1.76 enthalten. Auf der Website von Consol-Labs gibt es einen Hinweis, dass manche Checks mit DBD::Oracle Version 1.76 nicht funktionieren.
Beim Bauen des DBD::Oracle wird Version 1.83 heruntergelanden und installiert, mit der das Problem nicht auftritt.