СУБД
Добавил(а) shixaro, последний раз редактировал(а) shixaro Feb 22, 2011  (посмотреть изменения)
Метки: 

Вывод сделан в процентном соотношении, ибо мониторить сколько конкретно мегабайт/гигабайт там сейчас - в данном случае бесполезно и ненаглядно, а когда близко к тому, чтобы вырости до сотни (процентов) и стать "полочкой" - значит пипец близок. И все наоборот, когда нужно вести мониторинг размера тэблспэйсов безотносительно, в абсолютных величинах. Но это уже другой случай.

#!/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;

Картинка рисуется примерно такая:

Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.5 Build:#805 Apr 26, 2007) - Запрос Bug/feature - Связаться с администраторами