From: Christoph Z. <ci...@on...> - 2008-04-09 22:08:44
|
Matthew J Harriger wrote: > I am using just the SteadyDB module from DBUtils to provide fault-tolerant > connections to an Oracle database using cx_Oracle as the dbapi2 module. If > a client loses its network connection (network cable unplugged, out of > range of the wireless network, etc.), and then re-establishes the > connection, all Oracle connections and cursors that were open become > invalid. Trying to execute a statement with one of those cursors returns > an ORA-03114 NOT CONNECTED TO ORACLE error, which causes cx_Oracle to > raise an exception of class DatabaseError. However, SteadyDB only tries to > recover from OperationlError and InternalError exceptions(SteadyDB.py, > lines 238 and 338). Any chance that SteadyDB could be changed in future > versions to also recover from DatabaseErrors? Or perhaps there could be a > mechanism for advanced users to set what exception types SteadyDB tries to > recover from? Should I submit this as a bug? DatabaseError is very unspecific: I think cx_Oracle should really raise an OperationalError instead. I have noted this problem and will try myself next time I come across Oracle again. Can you also double check if it's really a DatabaseError and maybe ask the cx_Oracle folks whether this is intended? I currently only see they raise InterfaceErrors which would also be a problem: http://cx-oracle.svn.sourceforge.net/viewvc/cx-oracle/trunk/Connection.c?view=markup Making the error classes configurable is also a good idea, but we need to find a good default set and and I'd also like to see cx_Oracle fixed since I think OperationlError is the only correct exception for connection loss (the InternalError was already a concession). -- Christoph |