【问题标题】:access violation exception with 12c12c 的访问冲突异常
【发布时间】:2015-08-17 07:34:43
【问题描述】:

我们使用 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。请告诉我 如何解决这个问题。下面是异常的堆栈跟踪:

在 Oracle.DataAccess.Client.OpsCon.Close(IntPtr& opsConCtx, IntPtr& opsErrCtx, OpoConValCtx* pOpoConValCtx, OpoConRefCtx pOpoConRefCtx)
在 Oracle.DataAccess.Client.ConnectionPool.CheckLifeTimeAndStatus(OpoConCtx& opoConCtx, Boolean bDistTxnActive, Boolean& bClos​​ed, Int32 bFromPool, 布尔 bCheckLifetimeOnly,布尔 bFreeValCtxOnDispose,布尔 isPopulatePool) 在 Oracle.DataAccess.Client.ConnectionPool.PutConnection(OpoConCtx& opoConCtx,布尔值 bDoNotAllocValCtx,布尔值 bCheckStatus,布尔值 bCheckLifeTime, Int32 bDistTxnActive, Boolean isPopulatePool, Boolean bFreeValCtxOnDispose) 在 Oracle.DataAccess.Client.ConnectionDispenser.Close(OpoConCtx& opoConCtx,布尔 isContextConnection)在 Oracle.DataAccess.Client.OracleConnection.Close()

【问题讨论】:

  • 在您的机器上搜索 oci.dll。它是许多其他 Oracle 客户端 DLL 的一部分。如果您发现它删除/重命名您在该位置找到的所有其他 Oracle DLL。有可能一些旧的客户端 DLL 被遗留在了意想不到的地方,并且正在被加载并且不匹配,

标签: c# oracle access-violation odp.net oracle12c


【解决方案1】:

我已经看到这个问题出现在 ODP.NET 客户端的某些版本中,特别是非托管 64 位版本。

对于我能够调试、反汇编、诊断等的内容,这是 ODP.NET 客户端程序集中的一个错误。我最近在我们的工具中没有看到它,所以如果你还没有这样做,也许你可以升级到最新版本。

【讨论】:

  • 您使用的是哪个版本的 Oracle 客户端?
  • 我正在使用Version=2.121.2.0 那将是 12.1.2.0。通常我使用托管版本,它也有一些错误。
【解决方案2】:

Oracle.DataAccess(4.121.2.0) 似乎存在问题。我们安装了旧版本的 12c,它提供了 4.121.1.0 版本的 Oracle.DataAccess.dll。它解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多