使用perl来监控ORACLE DATAGUARD脚本
#!/usr/bin/perl
use strict;
use warnings;
use DBI; # Load the DBI module
my $ZabbixServer = "192.168.3.24";
my $ZabbixPort = "10051";
my $HOSTNAME = "ora2";
my $SenderCMD="/usr/local/zabbix/bin/zabbix_sender";
my $Primtns = "test_st";
my $Stantns = "test";
my $KEY = "Oracled.DG.Status";
my $KEYContent1 = "OK";
my $KEYContent2 = "Failed";
my $LogVal = 3;
my $user = "zabbix";
my $passwd = "zabbix";
my $Primseq = 0;
my $Stanseq = 0;
$ENV{"ORACLE_HOME"}='/oracle/product/11.2.0/db_1';
#$ENV{PATH} .= $ENV{PATH} . ':/oracle/product/11.2.0/db_1/bin';
### Perform the connection using the Oracle driver
my $dbh =
DBI->connect( "dbi:Oracle:$Primtns", "$user", "$passwd", { PrintError => 0 } )
or die "Can't connect to Oracle database: $DBI::errstr\n";
my $sth = $dbh->prepare(
"SELECT MAX(SEQUENCE#) MAXSEQ
FROM V\$ARCHIVED_LOG
WHERE RESETLOGS_ID=(
SELECT RESETLOGS_ID FROM V\$DATABASE_INCARNATION
WHERE STATUS='CURRENT') "
);
$sth->execute;
###
while ( my @recs = $sth->fetchrow_array ) {
$Primseq = $recs[0];
###
}
### Now, disconnect from the database
$dbh->disconnect
or warn "Disconnection failed: $DBI::errstr\n";
$dbh =
DBI->connect( "dbi:Oracle:$Stantns", "$user", "$passwd", { PrintError => 0 } )
or die "Can't connect to Oracle database: $DBI::errstr\n";
$sth = $dbh->prepare(
"SELECT MAX(SEQUENCE#) MAXSEQ
FROM V\$ARCHIVED_LOG
WHERE RESETLOGS_ID=(
SELECT RESETLOGS_ID FROM V\$DATABASE_INCARNATION
WHERE STATUS='CURRENT'
AND APPLIED='YES') "
);
$sth->execute;
###
while ( my @recs = $sth->fetchrow_array ) {
$Stanseq = $recs[0];
###
}
### Now, disconnect from the database
$dbh->disconnect
or warn "Disconnection failed: $DBI::errstr\n";
if($Primseq-$Stanseq>=$LogVal){
system("$SenderCMD -z $ZabbixServer -p $ZabbixPort -s $HOSTNAME -k $KEY -o $KEYContent2 >/dev/null 2>&1");
}else{
system("$SenderCMD -z $ZabbixServer -p $ZabbixPort -s $HOSTNAME -k $KEY -o $KEYContent1 >/dev/null 2>&1");
}
exit;