【问题标题】:Oracle ManagedDataAccess 4.122.18.3 gets ORA-12537 for some SQL-queriesOracle ManagedDataAccess 4.122.18.3 为某些 SQL 查询获取 ORA-12537
【发布时间】:2018-11-22 06:23:31
【问题描述】:

我们已经成功使用 Oracle ManagedDataAccess 4.122.1.0 很长时间了。 升级到 Oracle ManagedDataAccess 4.122.18.3 后,一些 SQL 查询运行良好,但一些 SQL 查询不断启动,导致 ORA-12537 错误:

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)

此类查询的示例如下(由 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;

使用 Oracle ManagedDataAccess 4.122.1.0 执行完全相同的 SQL 查询,没有任何错误。

Oracle ManagedDataAccess 4.122.18.3 有什么问题?

技术细节:

  • 没有安装 ODAC
  • .Net Framework 版本为 4.7
  • NHibernate 版本是 5.1.2
  • Oracle 数据库是 10.2

【问题讨论】:

    标签: oracle driver managed


    【解决方案1】:

    当我从 nuget 为 Oracle Database 10g 引用 Oracle.DataAccess 时,我解决了我的问题。

    【讨论】:

      【解决方案2】:

      检查 System Requirements 以获取 ODP.NET 托管驱动程序,第 18 版

      适用于 .NET 的 Oracle 数据提供程序,托管驱动程序需要以下内容:

      • 与 ODP.NET 相同的 Windows 操作系统支持,非托管驱动程序。

      • ODP.NET,托管驱动程序是用 AnyCPU 构建的。它在 32 位或 64 位 (x64) Windows 以及 32 位或 64 位 (x64) 上运行 .NET 框架。

      • Microsoft .NET Framework 4.5.2、4.6.x 或 4.7.x。

      • 访问 Oracle Database 11g 第 2 版或更高版本

      如您所见,ODP.NET 托管驱动程序版本 18 不再支持 Oracle 数据库 10.2。升级您的数据库(版本 10.2 大约有 15 年的历史)

      对于 ODP.NET 托管驱动程序,版本 12.2 System Requirements 说:

      • 访问 Oracle 数据库 10g 第 2 版或更高版本

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-16
        • 2018-09-05
        • 2011-04-27
        • 1970-01-01
        • 1970-01-01
        • 2017-01-23
        • 2019-03-18
        • 1970-01-01
        相关资源
        最近更新 更多