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

Reply via email to