Месту иногда свойственно заканчиваться. Поэтому мониторинг сабжа - крайне удобная штука. Вывод сделан в процентном соотношении, ибо мониторить сколько конкретно мегабайт/гигабайт там сейчас - в данном случае бесполезно и ненаглядно, а когда близко к тому, чтобы вырости до сотни (процентов) и стать "полочкой" - значит пипец близок. И все наоборот, когда нужно вести мониторинг размера тэблспэйсов безотносительно, в абсолютных величинах. Но это уже другой случай. :)
#!/usr/bin/perl
use DBI;
sub connect_oracle {
$ENV{'ORACLE_HOME'} = "/oracle";
$ENV{'NLS_LANG'} = "AMERICAN_AMERICA.CL8KOI8R";
$ENV{'LANG'}='ru.KOI8-R';
$ENV{'NLS_DATE_LANGUAGE'}='AMERICAN';
$ENV{'NLS_NUMERIC_CHARACTERS'}='.,';
$ENV{'TZ'} = "KSK-4KSD";
my $data_source=' свой дата соурсе для оракела';
my $d=DBI->connect($data_source,'логин','пароль',{RaiseError => 0, PrintError =>1, AutoCommit => 1});
return $d;
}
my $dbh=&connect_oracle();
my $TITLE='Oracle tablespaces usage';
my $param=$ARGV[0];
if ($param eq "autoconf") {exit;}
my $sth = $dbh->prepare("
select a.tablespace_name,
ROUND((round((a.bytes_alloc - nvl(b.bytes_free, 0)) / 1024 / 1024, 2)/round(a.bytes_alloc / 1024 / 1024, 2))*100,2) pct
from ( select f.tablespace_name,
sum(f.bytes) bytes_alloc,
sum(decode(f.autoextensible, 'YES',f.maxbytes,'NO', f.bytes)) maxbytes
from dba_data_files f
group by tablespace_name) a,
( select f.tablespace_name,
sum(f.bytes) bytes_free
from dba_free_space f
group by tablespace_name) b
where
a.tablespace_name = b.tablespace_name
and ROUND((round((a.bytes_alloc - nvl(b.bytes_free, 0)) / 1024 / 1024, 2)/round(a.bytes_alloc / 1024 / 1024, 2))*100,2)>=1
order by pct desc");
$sth->execute;
if ($param eq "config")
{
my $period=`${graph_period}`;
print "graph_order in\n";
print "graph_title $TITLE\n";
print "graph_args --base 1024\n";
print "graph_vlabel usage (percent)\n";
print "graph_category oracle\n";
while (my ($tablespace_name, $pct)=$sth->fetchrow_array())
{
print "$tablespace_name.label $tablespace_name\n";
print "$tablespace_name.min 0\n";
}
exit;
}
while (my ($tablespace_name, $pct)=$sth->fetchrow_array())
{
print "$tablespace_name.value $pct\n";
}
my $rc = $sth->finish;
$rc = $dbh->disconnect;