Code

bug fix for state and opt_c initialization
[nagiosplug.git] / plugins-scripts / check_oracle.sh
1 #!/bin/sh
2 #
3 # latigid010@yahoo.com
4 # 01/06/2000
5 #
6 #  This Nagios plugin was created to check remote or local TNS
7 #  status and check local Database status.
8 #
9 #  Add the following lines to your object config file (i.e. commands.cfg)
10 #         command[check-tns]=/usr/local/nagios/libexec/check_ora 1 $ARG$
11 #         command[check-oradb]=/usr/local/nagios/libexec/check_ora 2 $ARG$
12 #
13 #
14 # Usage: 
15 #      To check TNS Status:  ./check_ora 1 <Oracle Sid or Hostname/IP address>
16 #  To Check local database:  ./check_ora 2 <ORACLE_SID>
17 #
18 # I have the script checking for the Oracle PMON process and 
19 # the sgadefORACLE_SID.dbf file.
20
21 #
22 # If you have any problems check that you have the $ORACLE_HOME
23 # enviroment variable set, have $ORACLE_HOME/bin in your PATH, and
24 # dont forget about your tnsnames.ora file.  when checking Local
25 # Database status your ORACLE_SID is case sensitive.
26 #
28 PROGNAME=`basename $0`
29 PROGPATH=`echo $0 | sed -e 's,[\\/][^\\/][^\\/]*$,,'`
30 REVISION=`echo '$Revision$' | sed -e 's/[^0-9.]//g'`
32 . $PROGPATH/utils.sh
35 print_usage() {
36   echo "Usage:"
37   echo "  $PROGNAME --tns <Oracle Sid or Hostname/IP address>"
38   echo "  $PROGNAME --db <ORACLE_SID>"
39   echo "  $PROGNAME --oranames <Hostname>"
40   echo "  $PROGNAME --help"
41   echo "  $PROGNAME --version"
42 }
44 print_help() {
45         print_revision $PROGNAME $REVISION
46         echo ""
47         print_usage
48         echo ""
49         echo "Check remote or local TNS status and check local Database status"
50         echo ""
51   echo "--tns=SID/IP Address"
52   echo "   Check remote TNS server"
53   echo "--db=SID"
54   echo "   Check local database (search /bin/ps for PMON process and check"
55         echo "   filesystem for sgadefORACLE_SID.dbf"
56   echo "--oranames=Hostname"
57   echo "   Check remote Oracle Names server"
58   echo "--help"
59         echo "   Print this help screen"
60   echo "--version"
61         echo "   Print version and license information"
62         echo ""
63   echo "If the plugin doesn't work, check that the ORACLE_HOME environment"
64         echo "variable is set, that ORACLE_HOME/bin is in your PATH, and the"
65   echo "tnsnames.ora file is locatable and is properly configured."
66   echo ""
67   echo "When checking Local Database status your ORACLE_SID is case sensitive."
68   echo ""
69         support
70 }
72 case "$1" in
73 1)
74     cmd='--tns'
75     ;;
76 2)
77     cmd='--db'
78     ;;
79 *)
80     cmd="$1"
81     ;;
82 esac
84 # Hunt down a reasonable ORACLE_HOME
85 if [ -z "$ORACLE_HOME" ] ; then
86         # Adjust to taste
87         for oratab in /var/opt/oracle/oratab /etc/oratab
88         do
89         [ ! -f $oratab ] && continue
90         ORACLE_HOME=`IFS=:
91                 while read SID ORACLE_HOME junk;
92                 do
93                         if [ "$SID" = "$2" ] ; then
94                                 echo $ORACLE_HOME;
95                                 exit;
96                         fi;
97                 done < $oratab`
98         [ -n "$ORACLE_HOME" ] && break
99         done
100 fi
101 # Last resort
102 [ -z "$ORACLE_HOME" -a -d $PROGPATH/oracle ] && ORACLE_HOME=$PROGPATH/oracle
104 if [ -z "$ORACLE_HOME" -o ! -d "$ORACLE_HOME" ] ; then
105         echo "Cannot determine ORACLE_HOME for sid $2"
106         exit $STATE_UNKNOWN
107 fi
108 PATH=$PATH:$ORACLE_HOME/bin
109 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
110 export ORACLE_HOME PATH LD_LIBRARY_PATH
112 case "$cmd" in
113 --tns)
114     tnschk=` tnsping $2`
115     tnschk2=` echo  $tnschk | grep -c OK`
116     if [ ${tnschk2} -eq 1 ] ; then 
117         tnschk3=` echo $tnschk | sed -e 's/.*(//' -e 's/).*//'`
118         echo "OK - reply time ${tnschk3} from $2"
119         exit $STATE_OK
120     else
121         echo "No TNS Listener on $2"
122         exit $STATE_CRITICAL
123     fi
124     ;;
125 --oranames)
126     namesctl status $2 | awk '
127     /Server has been running for:/ {
128         msg = "OK: Up"
129         for (i = 6; i <= NF; i++) {
130             msg = msg " " $i
131         }
132         status = '$STATE_OK'
133     }
134     /error/ {
135         msg = "CRITICAL: " $0
136         status = '$STATE_CRITICAL'
137     }
138     END {
139         print msg
140         exit status
141     }'
142     ;;
143 --db)
144     pmonchk=`ps -ef | grep -v grep | grep ${2} | grep -c pmon`
145     if [ ${pmonchk} -ge 1 ] ; then
146         echo "${2} OK - ${pmonchk} PMON process(es) running"
147         exit $STATE_OK
148     #if [ -f $ORACLE_HOME/dbs/sga*${2}* ] ; then
149         #if [ ${pmonchk} -eq 1 ] ; then
150     #utime=`ls -la $ORACLE_HOME/dbs/sga*$2* | cut -c 43-55`
151             #echo "${2} OK - running since ${utime}"
152             #exit $STATE_OK
153         #fi
154     else
155         echo "${2} Database is DOWN"
156         exit $STATE_CRITICAL
157     fi
158     ;;
159 --help)
160                 print_help
161     exit $STATE_OK
162     ;;
163 -h)
164                 print_help
165     exit $STATE_OK
166     ;;
167 --version)
168                 print_revision $PLUGIN $REVISION
169     exit $STATE_OK
170     ;;
171 -V)
172                 print_revision $PLUGIN $REVISION
173     exit $STATE_OK
174     ;;
175 *)
176     print_usage
177                 exit $STATE_UNKNOWN
178 esac