我们使用Oracle 11g 64位odp客户端连接到11g数据库。我们最近升级到了Oracle 12c。我在本地计算机(Windows Server 2008 R2 64位)中卸载了11g odp客户端。我确保从regedit.exe
删除了注册表项。安装Oracle 12c 64位后,我可以成功建立连接。但在我尝试使用OracleConnection.close()
关闭连接后提交
“AccessViolationException:尝试读取或写入受保护的 记忆。这通常表明其他内存已损坏“。
我使用Visual Studio 2010 Professional作为IDE。请告诉我 如何解决这个问题。下面是异常的堆栈跟踪:
at Oracle.DataAccess.Client.OpsCon.Close(IntPtr& opsConCtx,IntPtr& opsErrCtx,OpoConValCtx * pOpoConValCtx,OpoConRefCtx pOpoConRefCtx)
在 Oracle.DataAccess.Client.ConnectionPool.CheckLifeTimeAndStatus(OpoConCtx&安培; opoConCtx,Boolean bDistTxnActive,Boolean& bClosed,Int32 bFromPool, Boolean bCheckLifetimeOnly,Boolean bFreeValCtxOnDispose,Boolean isPopulatePool)at Oracle.DataAccess.Client.ConnectionPool.PutConnection(OpoConCtx&安培; opoConCtx,Boolean bDoNotAllocValCtx,Boolean bCheckStatus,Boolean bCheckLifeTime,Int32 bDistTxnActive,Boolean isPopulatePool,Boolean bFreeValCtxOnDispose)at Oracle.DataAccess.Client.ConnectionDispenser.Close(OpoConCtx&安培; opoConCtx,Boolean isContextConnection)at Oracle.DataAccess.Client.OracleConnection.Close()
答案 0 :(得分:0)
我已经看到在ODP.NET客户端的某些版本中出现此问题,特别是非托管的64位版本。
我能够调试,反汇编,诊断等等,这是ODP.NET客户端程序集中的一个错误。我最近还没有在我们的工具中看到它,所以如果你还没有这样做,也许你可以升级到最新版本。
答案 1 :(得分:0)
Oracle.DataAccess(4.121.2.0)似乎存在问题。我们安装了12c的旧版本,它提供了4.121.1.0版本的Oracle.DataAccess.dll。它解决了这个问题。