System.AccessViolationException following database reconnection
803215Oct 6 2010 — edited Oct 8 2010We support a VB.NET application which uses Oracle Data Access Components (ODAC) 10.2.0.2.21 to access an Oracle 11g database. The database is on another server, so from time to time application loses its database connection because of comms failures. To cater for this eventuality the application before every database call checks for a valid connection and reopens the database if it can’t find one. This works, but subsequent database calls fail and return a System.AccessViolationException.
Here is an extract from the trace.
2010-09-08 17:08:42,284 ERROR - Database connection lost. Oracle.DataAccess.Client.OracleException ORA-03135: connection lost contact
at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx pOpoSqlValCtx, Object src, String procedure)
at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx pOpoSqlValCtx, Object src)
at Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery()
2010-09-08 17:08:42,377 [5] ERROR - Database connection established.
2010-09-08 17:08:42,440 [5] ERROR - error in xxxxxxxx. System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at Oracle.DataAccess.Client.OpsSql.ExecuteNonQuery(IntPtr opsConCtx, IntPtr& opsErrCtx, IntPtr& opsSqlCtx, IntPtr& opsDacCtx, IntPtr opsSubscrCtx, Int32& isSubscrRegistered, OpoSqlValCtx& pOpoSqlValCtx, String pCommandText, IntPtr& pUTF8CommandText, IntPtr[] pOpoPrmValCtx, String[] ppOpoPrmRefCtx, OpoMetValCtx& pOpoMetValCtx, Int32 prmCnt)
at Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery()
Has anyone come across this before? Any help will be gratefully received.
When this question was posted in another forum, someone suggested that the solution might be to flush out the connection pool. Could anyone elaborate on that?