Oracle ManagedDataAccess 4.122.18.3 gets ORA-12537 for some SQL-queries

0

We have successfully used Oracle ManagedDataAccess 4.122.1.0 for a long time. After upgrading to Oracle ManagedDataAccess 4.122.18.3, some SQL-queries work perfect, but some SQL queries started constantly causing an ORA-12537 error:

Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-12537: Network Session: End of file ---> OracleInternal.Network.NetworkException (0x000030F9): ORA-12537: Network Session: End of file
   at OracleInternal.Network.ReaderStream.Read(OraBuf OB)
   at OracleInternal.TTC.OraBufReader.GetDataFromNetwork()
   at OracleInternal.TTC.OraBufReader.Read(Boolean bIgnoreData)
   at OracleInternal.TTC.TTCExecuteSql.ReceiveExecuteResponse(Accessor[]& defineAccessors, Accessor[] bindAccessors, Boolean bHasReturningParams, SQLMetaData& sqlMetaData, SqlStatementType statementType, Int64 noOfRowsFetchedLastTime, Int32 noOfRowsToFetch, Int32& noOfRowsFetched, Int64& queryId, Int32 longFetchSize, Int64 initialLOBFetchSize, Int64[] scnFromExecution, Boolean bAllInputBinds, Int32 arrayBindCount, DataUnmarshaller& dataUnmarshaller, MarshalBindParameterValueHelper& marshalBindParamsHelper, Int64[]& rowsAffectedByArrayBind, Boolean bDefineDone, Boolean& bMoreThanOneRowAffectedByDmlWithRetClause, List`1& implicitRSList, Boolean bLOBArrayFetchRequired)
   at Oracle.ManagedDataAccess.Client.OracleException.HandleError(OracleTraceLevel level, OracleTraceTag tag, OracleTraceClassName className, OracleTraceFuncName funcName, Exception ex, OracleLogicalTransaction oracleLogicalTransaction)
   at OracleInternal.TTC.TTCExecuteSql.ReceiveExecuteResponse(Accessor[]& defineAccessors, Accessor[] bindAccessors, Boolean bHasReturningParams, SQLMetaData& sqlMetaData, SqlStatementType statementType, Int64 noOfRowsFetchedLastTime, Int32 noOfRowsToFetch, Int32& noOfRowsFetched, Int64& queryId, Int32 longFetchSize, Int64 initialLOBFetchSize, Int64[] scnFromExecution, Boolean bAllInputBinds, Int32 arrayBindCount, DataUnmarshaller& dataUnmarshaller, MarshalBindParameterValueHelper& marshalBindParamsHelper, Int64[]& rowsAffectedByArrayBind, Boolean bDefineDone, Boolean& bMoreThanOneRowAffectedByDmlWithRetClause, List`1& implicitRSList, Boolean bLOBArrayFetchRequired)
   at OracleInternal.ServiceObjects.OracleDataReaderImpl.FetchMoreRows(Int32 noOfRowsToFetch, Boolean fillReader, Boolean returnPSTypes)
   at Oracle.ManagedDataAccess.Client.OracleDataReader.Read()
   at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies, IResultTransformer forcedResultTransformer)
   at NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies, IResultTransformer forcedResultTransformer)
   at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters, IResultTransformer forcedResultTransformer)

Example of such query is below (it was generated by NHibernate):

select
   ID1_87_0_,
   ...
from
   (
      select
         NODEENTITY0_.ID as ID1_87_0_,
         ...
      from
         NODES NODEENTITY0_ 
         left outer join DIVISIONS DIVISIONEN1_ 
            on NODEENTITY0_.IDDIV = DIVISIONEN1_.ID 
         left outer join CONTRACTS CONTRACTEN2_ 
            on NODEENTITY0_.IDCONTRACT = CONTRACTEN2_.ID 
         left outer join ABONENTS ABONENTENT3_ 
            on CONTRACTEN2_.IDABONENT = ABONENTENT3_.ID 
         left outer join WATERWAYS WATERWAYEN4_ 
            on CONTRACTEN2_.IDWATERWAY = WATERWAYEN4_.ID 
         left outer join WARRANTY WARRANTYEN5_ 
            on NODEENTITY0_.IDWARRANTYLAST = WARRANTYEN5_.ID 
            and NODEENTITY0_.IDDIV = WARRANTYEN5_.IDDIVISION 
         left outer join SERVICECENTER SERVICECEN6_ 
            on WARRANTYEN5_.ID_SERVICECENTER = SERVICECEN6_.ID 
         left outer join PUS PUENTITY7_ 
            on NODEENTITY0_.IDPULAST = PUENTITY7_.ID 
         left outer join TPPUS TPPUENTITY8_ 
            on PUENTITY7_.IDTPPU = TPPUENTITY8_.ID 
      order by
         NODEENTITY0_.ID asc 
   )
where
   ROWNUM <= :P0;

Exactly the same SQL-query is being executed with Oracle ManagedDataAccess 4.122.1.0 without any error.

What do we do wrong with Oracle ManagedDataAccess 4.122.18.3 ?

Technical details:

  • No ODAC is installed
  • .Net Framework version is 4.7
  • NHibernate version is 5.1.2
  • Oracle Database is 10.2
oracle
driver
managed
asked on Stack Overflow Nov 22, 2018 by user2291296 • edited Nov 22, 2018 by user2291296

2 Answers

0

Check System Requirements for ODP.NET Managed Driver, Release 18

Oracle Data Provider for .NET, Managed Driver requires the following:

  • Same Windows operating system support as ODP.NET, Unmanaged Driver.

  • ODP.NET, Managed Driver is built with AnyCPU. It runs on either 32-bit or 64-bit (x64) Windows and on either 32-bit or 64-bit (x64) .NET Framework.

  • Microsoft .NET Framework 4.5.2, 4.6.x, or 4.7.x.

  • Access to Oracle Database 11g Release 2 or later

As you see Oracle Database 10.2 is not supported anymore by ODP.NET Managed Driver, Release 18. Upgrade your database (Version 10.2 is about 15 years old)

For ODP.NET Managed Driver, Release 12.2 System Requirements says:

  • Access to Oracle Database 10g Release 2 or later
answered on Stack Overflow Nov 22, 2018 by Wernfried Domscheit
0

I fixed my problem when I referenced Oracle.DataAccess from nuget for Oracle Database 10g.

answered on Stack Overflow Aug 5, 2020 by Göksel Çelik

User contributions licensed under CC BY-SA 3.0