All pastes #900027 Raw Edit

hali

public text v1 · immutable
·published 2008-02-11 16:52 UTC
rendered paste body
#!/usr/local/bin/perl

my $response;
my $perfdata;
my $alert;
my $crit = 0;
my $warn = 0;

my $orasid = $ARGV[0];
my $tblspace = $ARGV[1];


my @ts = `ORACLE_SID=$orasid; ORACLE_HOME=/opt/oracle/ora92; export ORACLE_SID ORACLE_HOME; /opt/oracle/ora92/bin/sqlplus -s / <<EOF
set heading off pages 0 feedback off verify off
select f.tablespace_name||';'||f.free||';'||nvl(u.used,0)||';'||t.tot from
(select tablespace_name, round(sum(bytes)/1024/1024) free from dba_free_space group by tablespace_name) f,
(select tablespace_name, round(sum(bytes)/1024/1024) used from dba_segments group by tablespace_name) u,
(select tablespace_name, round(sum(bytes)/1024/1024) tot from dba_data_files group by tablespace_name) t
where
f.tablespace_name=u.tablespace_name(+)
and f.tablespace_name=t.tablespace_name
and f.tablespace_name not IN ('XDB','INDX','UNDOTBS1')
/
EOF`;

foreach $ts (@ts) {
        my ($name, $free, $used, $tot) = split(';', $ts);
        if ($free < 30 && $free/$tot < 0.1) {
                $crit++;
                $response = "$response $name is CRITICAL.";
        } elsif ($free < 80 && $free/$tot < 0.25) {
                $warn++;
                $response = "$response $name is WARNING.";
        }
        $perfdata="$perfdata\ TS=$name;$free;$used;$tot";
        chomp($perfdata);
}
if ($crit) {
        print "CRITICAL - $response|$perfdata\n";
        exit 2;
} elsif ($warn) {
        print "WARNING - $response|$perfdata\n";
        exit 1;
} else {
        print "OK - all tablespaces ok|tblspace$perfdata\n";
        exit 0;
}