Inhaltsverzeichnis

Error Handling von SQL*Plus Aufrufen in Bash Skripten

Mit den beiden SQL*Plus Anweisungen kann ein Fehlercode zurück geben werden:

Einfacher Fall - direkter Aufruf von SQL*Plus

SQLPlus wird direkt aufgerufen:

...
DBVIEW=global_name
${ORACLE_HOME}/bin/sqlplus -s / as sysdba << EOScipt
WHENEVER SQLERROR EXIT SQL.SQLCODE
WHENEVER OSERROR  EXIT 9
set pagesize 0
set heading  off
set feedback off
select global_name from ${DBVIEW};
exit;
EOScipt
 
if [[ "$?" != "0" ]]; then
     DB_STATUS=DOWN
fi
...

Mit „WHENEVER OSERROR EXIT SQL.SQLCODE“ kann ein Code != 0 zurückgeben werden, aber da der SQL Errorcode eine negative Zahl ist, kann es passieren das nicht die erwartete Zahl auch wirklich im Rückgabe Ergebnis steht!


Aufruf von SQL*Plus über `` über eine Subshell

Um das Ergebniss eines SQL*Plus Aufrufes zu verwenden kann das so aufgerufen werden:

...
             # check for plugable dB
             DBVIEW=\$database
             PLUG_DB=`${ORACLE_HOME}/bin/sqlplus -s / as sysdba << EOScipt
WHENEVER OSERROR EXIT 9
WHENEVER SQLERROR EXIT 9
set pagesize 0
set heading  off
set feedback off
select cdb from v_${DBVIEW};
exit;
EOScipt`
 
DB_ERROR=$?
 
             if [[ "${DB_ERROR}" -ne "0" ]]; then
               PLUG_DB=DOWN
            fi
..

D.h. am besten Return Code von SQL*Plus gleich nach dem Aufruf in eine Variable zu schreiben, mit dieser Arbeiten, schnell ist $? von einem folgende Call überschrieben, ohne das der Fehler sofort ins Auge fällt.


Quellen

Doku: