diff options
Diffstat (limited to 'web/attachments/101436-check_oracle')
-rw-r--r-- | web/attachments/101436-check_oracle | 284 |
1 files changed, 284 insertions, 0 deletions
diff --git a/web/attachments/101436-check_oracle b/web/attachments/101436-check_oracle new file mode 100644 index 0000000..16fb473 --- /dev/null +++ b/web/attachments/101436-check_oracle | |||
@@ -0,0 +1,284 @@ | |||
1 | #! /bin/bash | ||
2 | # | ||
3 | # latigid010@yahoo.com | ||
4 | # 01/06/2000 | ||
5 | # | ||
6 | # This Nagios plugin was created to check Oracle status | ||
7 | # | ||
8 | |||
9 | PROGNAME=`basename $0` | ||
10 | PROGPATH=`echo $0 | sed -e 's,[\\/][^\\/][^\\/]*$,,'` | ||
11 | REVISION=`echo '$Revision: 1.12 $' | sed -e 's/[^0-9.]//g'` | ||
12 | |||
13 | . $PROGPATH/utils.sh | ||
14 | |||
15 | |||
16 | print_usage() { | ||
17 | echo "Usage:" | ||
18 | echo " $PROGNAME --tns <Oracle Sid or Hostname/IP address>" | ||
19 | echo " $PROGNAME --db <ORACLE_SID>" | ||
20 | echo " $PROGNAME --login <ORACLE_SID>" | ||
21 | echo " $PROGNAME --cache <ORACLE_SID> <USER> <PASS> <CRITICAL> <WARNING>" | ||
22 | echo " $PROGNAME --tablespace <ORACLE_SID> <USER> <PASS> <TABLESPACE> <CRITICAL> <WARNING>" | ||
23 | echo " $PROGNAME --oranames <Hostname>" | ||
24 | echo " $PROGNAME --help" | ||
25 | echo " $PROGNAME --version" | ||
26 | } | ||
27 | |||
28 | print_help() { | ||
29 | print_revision $PROGNAME $REVISION | ||
30 | echo "" | ||
31 | print_usage | ||
32 | echo "" | ||
33 | echo "Check Oracle status" | ||
34 | echo "" | ||
35 | echo "--tns SID/IP Address" | ||
36 | echo " Check remote TNS server" | ||
37 | echo "--db SID" | ||
38 | echo " Check local database (search /bin/ps for PMON process) and check" | ||
39 | echo " filesystem for sgadefORACLE_SID.dbf" | ||
40 | echo "--login SID" | ||
41 | echo " Attempt a dummy login and alert if not ORA-01017: invalid username/password" | ||
42 | echo "--cache" | ||
43 | echo " Check local database for library and buffer cache hit ratios" | ||
44 | echo " ---> Requires Oracle user/password and SID specified." | ||
45 | echo " ---> Requires select on v_$sysstat and v_$librarycache" | ||
46 | echo "--tablespace" | ||
47 | echo " Check local database for tablespace capacity in ORACLE_SID" | ||
48 | echo " ---> Requires Oracle user/password specified." | ||
49 | echo " ---> Requires select on dba_data_files and dba_free_space" | ||
50 | echo "--oranames Hostname" | ||
51 | echo " Check remote Oracle Names server" | ||
52 | echo "--help" | ||
53 | echo " Print this help screen" | ||
54 | echo "--version" | ||
55 | echo " Print version and license information" | ||
56 | echo "" | ||
57 | echo "If the plugin doesn't work, check that the ORACLE_HOME environment" | ||
58 | echo "variable is set, that ORACLE_HOME/bin is in your PATH, and the" | ||
59 | echo "tnsnames.ora file is locatable and is properly configured." | ||
60 | echo "" | ||
61 | echo "When checking local database status your ORACLE_SID is case sensitive." | ||
62 | echo "" | ||
63 | echo "If you want to use a default Oracle home, add in your oratab file:" | ||
64 | echo "*:/opt/app/oracle/product/7.3.4:N" | ||
65 | echo "" | ||
66 | support | ||
67 | } | ||
68 | |||
69 | case "$1" in | ||
70 | 1) | ||
71 | cmd='--tns' | ||
72 | ;; | ||
73 | 2) | ||
74 | cmd='--db' | ||
75 | ;; | ||
76 | *) | ||
77 | cmd="$1" | ||
78 | ;; | ||
79 | esac | ||
80 | |||
81 | # Information options | ||
82 | case "$cmd" in | ||
83 | --help) | ||
84 | print_help | ||
85 | exit $STATE_OK | ||
86 | ;; | ||
87 | -h) | ||
88 | print_help | ||
89 | exit $STATE_OK | ||
90 | ;; | ||
91 | --version) | ||
92 | print_revision $PLUGIN $REVISION | ||
93 | exit $STATE_OK | ||
94 | ;; | ||
95 | -V) | ||
96 | print_revision $PLUGIN $REVISION | ||
97 | exit $STATE_OK | ||
98 | ;; | ||
99 | esac | ||
100 | |||
101 | # Hunt down a reasonable ORACLE_HOME | ||
102 | if [ -z "$ORACLE_HOME" ] ; then | ||
103 | # Adjust to taste | ||
104 | for oratab in /var/opt/oracle/oratab /etc/oratab | ||
105 | do | ||
106 | [ ! -f $oratab ] && continue | ||
107 | ORACLE_HOME=`IFS=: | ||
108 | while read SID ORACLE_HOME junk; | ||
109 | do | ||
110 | if [ "$SID" = "$2" -o "$SID" = "*" ] ; then | ||
111 | echo $ORACLE_HOME; | ||
112 | exit; | ||
113 | fi; | ||
114 | done < $oratab` | ||
115 | [ -n "$ORACLE_HOME" ] && break | ||
116 | done | ||
117 | fi | ||
118 | # Last resort | ||
119 | [ -z "$ORACLE_HOME" -a -d $PROGPATH/oracle ] && ORACLE_HOME=$PROGPATH/oracle | ||
120 | |||
121 | if [ -z "$ORACLE_HOME" -o ! -d "$ORACLE_HOME" ] ; then | ||
122 | echo "Cannot determine ORACLE_HOME for sid $2" | ||
123 | exit $STATE_UNKNOWN | ||
124 | fi | ||
125 | PATH=$PATH:$ORACLE_HOME/bin | ||
126 | LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib | ||
127 | export ORACLE_HOME PATH LD_LIBRARY_PATH | ||
128 | |||
129 | case "$cmd" in | ||
130 | --tns) | ||
131 | tnschk=` tnsping $2` | ||
132 | tnschk2=` echo $tnschk | grep -c OK` | ||
133 | if [ ${tnschk2} -eq 1 ] ; then | ||
134 | tnschk3=` echo $tnschk | sed -e 's/.*(//' -e 's/).*//'` | ||
135 | echo "OK - reply time ${tnschk3} from $2" | ||
136 | exit $STATE_OK | ||
137 | else | ||
138 | echo "No TNS Listener on $2" | ||
139 | exit $STATE_CRITICAL | ||
140 | fi | ||
141 | ;; | ||
142 | --oranames) | ||
143 | namesctl status $2 | awk ' | ||
144 | /Server has been running for:/ { | ||
145 | msg = "OK: Up" | ||
146 | for (i = 6; i <= NF; i++) { | ||
147 | msg = msg " " $i | ||
148 | } | ||
149 | status = '$STATE_OK' | ||
150 | } | ||
151 | /error/ { | ||
152 | msg = "CRITICAL: " $0 | ||
153 | status = '$STATE_CRITICAL' | ||
154 | } | ||
155 | END { | ||
156 | print msg | ||
157 | exit status | ||
158 | }' | ||
159 | ;; | ||
160 | --db) | ||
161 | pmonchk=`ps -ef | grep -v grep | grep ${2} | grep -c pmon` | ||
162 | if [ ${pmonchk} -ge 1 ] ; then | ||
163 | echo "${2} OK - ${pmonchk} PMON process(es) running" | ||
164 | exit $STATE_OK | ||
165 | #if [ -f $ORACLE_HOME/dbs/sga*${2}* ] ; then | ||
166 | #if [ ${pmonchk} -eq 1 ] ; then | ||
167 | #utime=`ls -la $ORACLE_HOME/dbs/sga*$2* | cut -c 43-55` | ||
168 | #echo "${2} OK - running since ${utime}" | ||
169 | #exit $STATE_OK | ||
170 | #fi | ||
171 | else | ||
172 | echo "${2} Database is DOWN" | ||
173 | exit $STATE_CRITICAL | ||
174 | fi | ||
175 | ;; | ||
176 | --login) | ||
177 | loginchk=`sqlplus dummy/user@$2 < /dev/null` | ||
178 | loginchk2=` echo $loginchk | grep -c ORA-01017` | ||
179 | if [ ${loginchk2} -eq 1 ] ; then | ||
180 | echo "OK - dummy login connected" | ||
181 | exit $STATE_OK | ||
182 | else | ||
183 | loginchk3=` echo "$loginchk" | grep "ORA-" | head -1` | ||
184 | echo "CRITICAL - $loginchk3" | ||
185 | exit $STATE_CRITICAL | ||
186 | fi | ||
187 | ;; | ||
188 | --cache) | ||
189 | if [ ${5} -gt ${6} ] ; then | ||
190 | echo "UNKNOWN - Warning level is less then Crit" | ||
191 | exit $STATE_UNKNOWN | ||
192 | fi | ||
193 | result=`sqlplus -s ${3}/${4}@${2} << EOF | ||
194 | set pagesize 0 | ||
195 | set numf '9999999.99' | ||
196 | select (1-(pr.value/(dbg.value+cg.value)))*100 | ||
197 | from v\\$sysstat pr, v\\$sysstat dbg, v\\$sysstat cg | ||
198 | where pr.name='physical reads' | ||
199 | and dbg.name='db block gets' | ||
200 | and cg.name='consistent gets'; | ||
201 | EOF` | ||
202 | |||
203 | if [ -n "`echo $result | grep ORA-`" ] ; then | ||
204 | error=` echo "$result" | grep "ORA-" | head -1` | ||
205 | echo "CRITICAL - $error" | ||
206 | exit $STATE_CRITICAL | ||
207 | fi | ||
208 | |||
209 | buf_hr=`echo "$result" | awk '/^[0-9\. \t]+$/ {print int($1)}'` | ||
210 | buf_hrx=`echo "$result" | awk '/^[0-9\. \t]+$/ {print $1}'` | ||
211 | result=`sqlplus -s ${3}/${4}@${2} << EOF | ||
212 | set pagesize 0 | ||
213 | set numf '9999999.99' | ||
214 | select sum(lc.pins)/(sum(lc.pins)+sum(lc.reloads))*100 | ||
215 | from v\\$librarycache lc; | ||
216 | EOF` | ||
217 | |||
218 | if [ -n "`echo $result | grep ORA-`" ] ; then | ||
219 | error=` echo "$result" | grep "ORA-" | head -1` | ||
220 | echo "CRITICAL - $error" | ||
221 | exit $STATE_CRITICAL | ||
222 | fi | ||
223 | |||
224 | lib_hr=`echo "$result" | awk '/^[0-9\. \t]+$/ {print int($1)}'` | ||
225 | lib_hrx=`echo "$result" | awk '/^[0-9\. \t]+$/ {print $1}'` | ||
226 | |||
227 | if [ $buf_hr -le ${5} -o $lib_hr -le ${5} ] ; then | ||
228 | echo "${2} CRITICAL - Cache Hit Rates: $lib_hrx% Lib -- $buf_hrx% Buff|lib=$lib_hrx%;${6};${5};0;100 buffer=$buf_hrx%;${6};${5};0;100" | ||
229 | exit $STATE_CRITICAL | ||
230 | fi | ||
231 | if [ $buf_hr -le ${6} -o $lib_hr -le ${6} ] ; then | ||
232 | echo "${2} WARNING - Cache Hit Rates: $lib_hrx% Lib -- $buf_hrx% Buff|lib=$lib_hrx%;${6};${5};0;100 buffer=$buf_hrx%;${6};${5};0;100" | ||
233 | exit $STATE_WARNING | ||
234 | fi | ||
235 | echo "${2} OK - Cache Hit Rates: $lib_hrx% Lib -- $buf_hrx% Buff|lib=$lib_hrx%;${6};${5};0;100 buffer=$buf_hrx%;${6};${5};0;100" | ||
236 | |||
237 | exit $STATE_OK | ||
238 | ;; | ||
239 | --tablespace) | ||
240 | if [ ${6} -lt ${7} ] ; then | ||
241 | echo "UNKNOWN - Warning level is more then Crit" | ||
242 | exit $STATE_UNKNOWN | ||
243 | fi | ||
244 | result=`sqlplus -s ${3}/${4}@${2} << EOF | ||
245 | set pagesize 0 | ||
246 | set numf '9999999.99' | ||
247 | select b.free,a.total,100 - trunc(b.free/a.total * 1000) / 10 prc | ||
248 | from ( | ||
249 | select tablespace_name,sum(bytes)/1024/1024 total | ||
250 | from dba_data_files group by tablespace_name) A, | ||
251 | ( select tablespace_name,sum(bytes)/1024/1024 free | ||
252 | from dba_free_space group by tablespace_name) B | ||
253 | where a.tablespace_name=b.tablespace_name and a.tablespace_name='${5}'; | ||
254 | EOF` | ||
255 | |||
256 | if [ -n "`echo $result | grep ORA-`" ] ; then | ||
257 | error=` echo "$result" | grep "ORA-" | head -1` | ||
258 | echo "CRITICAL - $error" | ||
259 | exit $STATE_CRITICAL | ||
260 | fi | ||
261 | |||
262 | ts_free=`echo "$result" | awk '/^[ 0-9\.\t ]+$/ {print int($1)}'` | ||
263 | ts_total=`echo "$result" | awk '/^[ 0-9\.\t ]+$/ {print int($2)}'` | ||
264 | ts_pct=`echo "$result" | awk '/^[ 0-9\.\t ]+$/ {print int($3)}'` | ||
265 | ts_pctx=`echo "$result" | awk '/^[ 0-9\.\t ]+$/ {print $3}'` | ||
266 | if [ "$ts_free" -eq 0 -a "$ts_total" -eq 0 -a "$ts_pct" -eq 0 ] ; then | ||
267 | echo "No data returned by Oracle - tablespace $5 not found?" | ||
268 | exit $STATE_UNKNOWN | ||
269 | fi | ||
270 | if [ "$ts_pct" -ge ${6} ] ; then | ||
271 | echo "${2} : ${5} CRITICAL - $ts_pctx% used [ $ts_free / $ts_total MB available ]|${5}=$ts_pctx%;${7};${6};0;100" | ||
272 | exit $STATE_CRITICAL | ||
273 | fi | ||
274 | if [ "$ts_pct" -ge ${7} ] ; then | ||
275 | echo "${2} : ${5} WARNING - $ts_pctx% used [ $ts_free / $ts_total MB available ]|${5}=$ts_pctx%;${7};${6};0;100" | ||
276 | exit $STATE_WARNING | ||
277 | fi | ||
278 | echo "${2} : ${5} OK - $ts_pctx% used [ $ts_free / $ts_total MB available ]|${5}=$ts_pctx%;${7};${6};0;100" | ||
279 | exit $STATE_OK | ||
280 | ;; | ||
281 | *) | ||
282 | print_usage | ||
283 | exit $STATE_UNKNOWN | ||
284 | esac | ||