【问题标题】:ODP.NET and OLEDB with Multiple Oracle Homes具有多个 Oracle 主目录的 ODP.NET 和 OLEDB
【发布时间】:2015-03-21 19:28:40
【问题描述】:

由于遗留原因,我们的 .NET 4.0 应用程序当前使用 Oracle OLEDB 和 ODP.NET 提供程序来连接到 Oracle 实例。我们在 11.2.0.3.0 Oracle 客户端上进行了标准化。安装一个 Oracle 客户端后,两个数据提供程序都按预期工作。

已在已安装 11.2.0.1.0 客户端的计算机上报告了问题。为我们的应用程序安装了第二个客户端 11.2.0.3.0。安装如下:

c:\oracle
    \product
      \11.2.0
        \client_1      <-- (existing) 11.2.0.1.0
          \bin         <-- OraOLEDB11.dll registered here
          \network
            \admin     <-- TNSNAMES does NOT contain ORACLESVR
        \client_2      <-- (new) 11.2.0.3.0
          \bin  
          \network
            \admin     <-- TNSNAMES contains ORACLESVR

由于 11.2.0.3.0 安装程序中的 bug,OLEDB 驱动程序未在第二个主目录中注册,这意味着 11.2.0.1.0 驱动程序保持注册状态。

这会导致一些我无法解释的有趣/奇怪的行为:

  1. 如果首先使用应用程序的“来自 11.2.0.3.0 的 ODP.NET”部分,则两个提供程序都可以连接,这意味着“来自 11.2.0.1.0 的 OLEDB”正在使用来自 _2 主页的 tnsnames.ora .
  2. 如果首先使用应用程序的“来自 11.2.0.1.0 的 OLEDB”部分,则两个提供商都不会连接,可能是因为两者都使用 _1 主页中的 tnsnames.ora。

因此,一旦为应用程序确定了 Oracle 主目录,两个客户端都会尝试使用该主目录,从而导致完全成功或完全失败。

要解决此问题,我们可以执行以下操作:注册 11.2.0.3.0 OLEDB 提供程序,添加 TNS_ADMIN 环境变量,或从 _1 主页添加 ORACLESVR tnsnames.ora。

但是,我想知道为什么会发生这种情况?在每个提供程序的 Oracle 文档中,我找不到在存在两个客户端且未指定 TNS_ADMIN 时如何定位 tnsnames.ora 文件。

一个提供者如何影响另一个提供者?

【问题讨论】:

    标签: oracle oledb odp.net tnsnames oracle-home


    【解决方案1】:

    OLEDB 基于 Microsoft COM,您注册的每个 DLL 都必须有一个不同的名称。因此,您不能从不同位置多次注册OraOLEDB11.dll,即 OLEDB 只能安装一次(每个架构)。

    如果您尝试在一台机器上安装多个 OLEDB,Oracle 安装程序会造成混乱。安装多个 Oracle 客户端总是一个挑战。

    这些位置被搜索tnsnames.ora,resp。 sqlnet.ora:

    1. 当前路径(与正在运行的客户端应用程序关联)
    2. 为会话定义的环境变量TNS_ADMIN
    3. 为系统定义的环境变量TNS_ADMIN
    4. Windows 注册表项 HKLM\SOFTWARE\ORACLE\KEY_{ORACLE_HOME_NAME}\TNS_ADMIN(适用于 x64)或 HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_{ORACLE_HOME_NAME}\TNS_ADMIN(适用于 x86)
    5. %ORACLE_HOME%\network\admin

    我从 Oracle Metalink 111942.1(指 Oracle 9.x 和 Windows NT/2000)获得此列表

    我不知道它是否适用于您可能使用的每个单独的 Oracle 提供程序/驱动程序。当您使用Process Monitor 跟踪您的应用程序时,您可以获得不同的顺序。

    【讨论】:

      猜你喜欢
      • 2011-04-04
      • 2018-02-01
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      • 2016-08-02
      • 2021-11-03
      • 2021-12-09
      • 1970-01-01
      相关资源
      最近更新 更多