On Fri, Apr 24, 2009 at 10:20:07AM +0100, Martin Evans wrote: > Hi, > > Early this morning a perl process of ours got the following error on stderr: > > DBD::Oracle::db do failed: ORA-24909: call in progress. Current > operation cancelled (DBD ERROR: OCIStmtExecute) at > /usr/lib/perl5/site_perl/5.8.8/DBIx/Log4perl/ > db.pm line 83.
(Setting ShowErrorStatement may help if you're not sure which statement was affected.) > The first significant thing is that it was output on stderr and not > caught by DBI/DBD::Oracle and therefore not signalled as a normal error > (DBIx::Log4perl has a DBI error handler which never saw it). I'm not sure what you meant by "not caught by DBI/DBD::Oracle". The "DBD::Oracle::db do failed:" prefix is only added by the PrintError/RaiseError/HandleError code. > Our code is not threaded. Oracles documentation says: > > The OCI call was invoked when another call on the connection was in > progress. Check if the OCI call is supported when the call is in > progress under special conditions; for example, if it is being used by a > signal handler. What this means is that an OCI call (Oracle call > interface, the lowest language you can program in to access the Oracle > database) is issued, while another call is still being executed. eg: one > OCI call tries to read a cursor, but another OCI call, which closes the > cursor is already in progress. As it says, check signal handlers, and perhaps exception handlers as it might be possible for an exception from within a DBD::Oracle call to leave a handle in a state where a later execute() would cause an error. Another thing to check is forking, in all it's forms, as the sub-process would inherit the file descriptors and could cause problems. Tim.
