Собственно нужно в цикле опросить несколько серверов БД Firebird, если нет подключения к серверу, то выводим сообщение о недоступности и переходим к следующему серверу БД. Слепил вот такой вот говно-код, т.к. програмлю на перле впервые, после подключения к заведомо неработающему серверу строкой $dbh=DBI->connect($dsn, $user, $spassword) появляется ошибка (DBI connect('hostname=192.168.1.2/3051;db=database;win1251','sysdba',...) failed: can't format message 13:98 — message system code -4 -Unable to complete network request to host «192.168.1.2». -Failed to establish a connection. at ./6.sh line 67. ) и работа программы просто прерывается, хотя стоит задача, выявить невозможность подключения и перейти к следующему серверу БД. Пока сервера БД доступны, цикл обрабатывается без сбоев.
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
my $user="sysdba";
my $password="masterkey";
my @hosts="192.168.1.1","192.168.1.2","192.168.1.3";
my $dbport="3051";
my $db="database";
my $ib_charset="win1251";
my $i;
for ($i=0; $i<@hosts; $i++) {
my $dsn="dbi:Firebird:hostname=${hosts[$i]}/$dbport;db=${db};$ib_charset";
my $dbh;
if ($dbh=DBI->connect($dsn, $user, $spassword)) {
print "Соединение с БД ${hosts[$i]} по порту tcp/$dbport успешно установлено\n";
} else {
print "Соединение с БД ${hosts[$i]} по порту tcp/$dbport не установлено, возможно сервер БД не запущен или доступ к нему блокируется МЭ\n";
}
$dbh->disconnect;
}
exit;