Oracle ping

"David E. Wheeler" <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.dbi.sybase.devel
Message-ID <[email protected]>
Fellow DBIers,

When I wrote DBIx::Connector, I borrowed this code from DBIx::Class to “work around an issue”:

    sub ping {
        my ($self, $dbh) = @_;
        eval {
            local $dbh->{RaiseError} = 1;
            $dbh->do('select 1 from dual');
        };
        return $@ ? 0 : 1;
    }

The reason for this workaround is described in [this comment](https://rt.cpan.org/Ticket/Display.html?id=47005#txn-808055) from Peter Rabbitison:

> DBD::Oracle has some shutdown state in which it will return 1 on ping as long as the socket is still open. This however did not guarantee the server is any longer in a state to execute
> queries. So what happened was:
> 
> 1) the weird state is reached
> 2) a txn_do takes place and fails on the first sql command
> 3) the code calls ping() and gets a connected reply
> 4) the txn_do is not retried
> 5) ...
> 6) users lose profit

So a few questions about this:

1. Was this issue reported somewhere?
2. If so, was it fixed or otherwise worked around?
3. And if it was fixed, in what version of DBD::Oracle?

Thanks,

David
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.