# easyAGENT for Oracle ASM disk volumes # $Id: OracleASM.pm,v 1.1 2008/10/15 20:30:54 hali Exp root $ # # should have user:pass:sid in /usr/local/soap/etc/oracle # package OracleASM; use strict; my @ORATABS=("/var/opt/oracle/oratab","/etc/oratab"); my $oratab = sub { my $ora_sid = $_[0]; if($ora_sid =~ m/'/) { die("invalid ora_sid\n"); } my $home = `/usr/local/bin/dbhome '$ora_sid'`; if($? == 0) { chomp($home); $ENV{'ORACLE_HOME'}=$home; return $home; } else { print STDERR "cannot find ORACLE_HOME for sid $ora_sid\n"; return undef; } }; sub asm { my($asm_name, $ora_sid) = split(':', $_[1]); if(not defined($ENV{ORACLE_HOME})) { $oratab->($ora_sid); } if($asm_name =~ /[^a-zA-Z0-9]/) { die("invalid volume name\n"); } $ENV{'PATH'} = $ENV{'PATH'} . ':/usr/local/bin'; $ENV{'ORACLE_SID'} = $ora_sid; my $cmd = "sudo -u oracle ".$ENV{ORACLE_HOME}."/bin/asmcmd lsdg -H $asm_name"; my $lsdg = `$cmd`; my(@lsdg_array) = split(/\s+/,$lsdg); if($lsdg_array[0] ne "MOUNTED") { die("disk group ${asm_name} not found in ${ora_sid}\n"); } return sprintf "%.2fM/%.2fM\n", ($lsdg_array[6]-$lsdg_array[7]), $lsdg_array[6]; } 1;