sophate has asked for the wisdom of the Perl Monks concerning the following question:

Hi,

I am using DBI(v1.642) and DBD-Sybase-freetds(v1.08) to connect to a SQL server cluster. The connection fails randomly. After some investigation, I find the DB hostname is resolved to two IP addresses by a DNS server. Only one IP address is working and the other IP is not working. This causes the DB connection to fail randomly. Here is the DB connection error message.

err: 41 sev: 78 state: 0 line: 0 server: not available proc: not available msg: Server is unavailable or does not exist. sql: not available err_type: client

Here are the DB connection codes.

$ENV{'TDSVER'} = '7.0'; my $DBhandle = DBI->connect( "DBI:Sybase:host=$Hostname;port=$Port;dat +abase=$DBName", "$UserID", "$Pwd", { syb_err_handler => \&SybaseError +Handle } );

Any idea how to deal with hostname that returns multiple IP addresses but only one is ACTIVE with DBI?

Replies are listed 'Best First'.
Re: Database connection issue with SQL server cluster
by Veltro (Hermit) on Feb 28, 2020 at 09:03 UTC

    I don't have experience with Sybase, but a quick look it seems Sybase supports some kind of High Availablity (redundancy?). There is a module DBIx::HA. Maybe this could help you out

Re: Database connection issue with SQL server cluster
by sophate (Beadle) on Feb 28, 2020 at 04:08 UTC

    I have worked around the problem by looking up the IP addresses, check if IP:port is reachable, then connect to the DB with IP:port instead of hostname:port. But wondering if this could be handled by the DBI?

Re: Database connection issue with SQL server cluster
by soonix (Chancellor) on Feb 29, 2020 at 08:53 UTC
    This looks like a configuration error in DNS or the server cluster, and your workaround seems to me the second best solution - the best, of course, being to have the configuration of the server(s) in question fixed ...