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