Code

Add test for Oracle name server, can dynamicall determine ORACLE_HOME - tom Bertelson
authorSubhendu Ghosh <sghosh@users.sourceforge.net>
Thu, 6 Jun 2002 04:15:06 +0000 (04:15 +0000)
committerSubhendu Ghosh <sghosh@users.sourceforge.net>
Thu, 6 Jun 2002 04:15:06 +0000 (04:15 +0000)
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@45 f882894a-f735-0410-b71e-b25c423dba1c

plugins-scripts/check_oracle.sh

index 1a4d8ab678cd5539c04cdae6a9a6fd0866c96d21..d2a84fe7cc4d4d6c083a50f81a2d5df8fc442f5c 100755 (executable)
@@ -36,6 +36,7 @@ print_usage() {
   echo "Usage:"
   echo "  $PROGNAME --tns <Oracle Sid or Hostname/IP address>"
   echo "  $PROGNAME --db <ORACLE_SID>"
+  echo "  $PROGNAME --oranames <Hostname>"
   echo "  $PROGNAME --help"
   echo "  $PROGNAME --version"
 }
@@ -52,13 +53,15 @@ print_help() {
   echo "--db=SID"
   echo "   Check local database (search /bin/ps for PMON process and check"
        echo "   filesystem for sgadefORACLE_SID.dbf"
+  echo "--oranames=Hostname"
+  echo "   Check remote Oracle Names server"
   echo "--help"
        echo "   Print this help screen"
   echo "--version"
        echo "   Print version and license information"
        echo ""
-  echo "If the plugin doesn't work, check that the $ORACLE_HOME environment"
-       echo "variable is set, that $ORACLE_HOME/bin is in your PATH, and the"
+  echo "If the plugin doesn't work, check that the ORACLE_HOME environment"
+       echo "variable is set, that ORACLE_HOME/bin is in your PATH, and the"
   echo "tnsnames.ora file is locatable and is properly configured."
   echo ""
   echo "When checking Local Database status your ORACLE_SID is case sensitive."
@@ -78,27 +81,76 @@ case "$1" in
     ;;
 esac
 
+# Hunt down a reasonable ORACLE_HOME
+if [ -z "$ORACLE_HOME" ] ; then
+       # Adjust to taste
+       for oratab in /var/opt/oracle/oratab /etc/oratab
+       do
+       [ ! -f $oratab ] && continue
+       ORACLE_HOME=`IFS=:
+               while read SID ORACLE_HOME junk;
+               do
+                       if [ "$SID" = "$2" ] ; then
+                               echo $ORACLE_HOME;
+                               exit;
+                       fi;
+               done < $oratab`
+       [ -n "$ORACLE_HOME" ] && break
+       done
+fi
+# Last resort
+[ -z "$ORACLE_HOME" -a -d $PROGPATH/oracle ] && ORACLE_HOME=$PROGPATH/oracle
+
+if [ -z "$ORACLE_HOME" -o ! -d "$ORACLE_HOME" ] ; then
+       echo "Cannot determine ORACLE_HOME for sid $2"
+       exit $STATE_UNKNOWN
+fi
+PATH=$PATH:$ORACLE_HOME/bin
+LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
+export ORACLE_HOME PATH LD_LIBRARY_PATH
+
 case "$cmd" in
 --tns)
-    export tnschk=` tnsping $2`
-    export tnschk2=` echo  $tnschk | grep -c OK`
-    export tnschk3=` echo $tnschk | cut -d\( -f7 | sed y/\)/" "/`
+    tnschk=` tnsping $2`
+    tnschk2=` echo  $tnschk | grep -c OK`
     if [ ${tnschk2} -eq 1 ] ; then 
+       tnschk3=` echo $tnschk | sed -e 's/.*(//' -e 's/).*//'`
        echo "OK - reply time ${tnschk3} from $2"
-       exit 0
+       exit $STATE_OK
     else
        echo "No TNS Listener on $2"
        exit $STATE_CRITICAL
     fi
     ;;
+--oranames)
+    namesctl status $2 | awk '
+    /Server has been running for:/ {
+       msg = "OK: Up"
+       for (i = 6; i <= NF; i++) {
+           msg = msg " " $i
+       }
+       status = '$STATE_OK'
+    }
+    /error/ {
+       msg = "CRITICAL: " $0
+       status = '$STATE_CRITICAL'
+    }
+    END {
+       print msg
+       exit status
+    }'
+    ;;
 --db)
-    export pmonchk=`ps -ef | grep -v grep | grep ${2} | grep -c pmon`
-    if [ -e $ORACLE_HOME/dbs/sga*${2}* ] ; then
-       if [ ${pmonchk} -eq 1 ] ; then
-    export utime=`ls -la $ORACLE_HOME/dbs/sga*$2* | cut -c 43-55`
-           echo "${2} OK - running since ${utime}"
-           exit $STATE_OK
-       fi
+    pmonchk=`ps -ef | grep -v grep | grep ${2} | grep -c pmon`
+    if [ ${pmonchk} -ge 1 ] ; then
+       echo "${2} OK - ${pmonchk} PMON process(es) running"
+       exit $STATE_OK
+    #if [ -f $ORACLE_HOME/dbs/sga*${2}* ] ; then
+       #if [ ${pmonchk} -eq 1 ] ; then
+    #utime=`ls -la $ORACLE_HOME/dbs/sga*$2* | cut -c 43-55`
+           #echo "${2} OK - running since ${utime}"
+           #exit $STATE_OK
+       #fi
     else
        echo "${2} Database is DOWN"
        exit $STATE_CRITICAL