【问题标题】:How to install ODP.NET 2.111 and ODP.NET 4.112 in the same machine side-by-side while both point to the same database server如何在同一台机器上并排安装 ODP.NET 2.111 和 ODP.NET 4.112,同时都指向同一个数据库服务器
【发布时间】:2013-03-07 14:14:02
【问题描述】:

问题是如何在同一台机器上并排安装 ODP.NET 2.111 和 ODP.NET 4.112,同时使用 tnsnames.ora 指向同一个数据库服务器

我需要支持基于 Oracle 11.1.0 的旧系统。系统使用 ODP.NET 2.111 连接到 oracle。有两个客户端安装在:

C:\oracle\product\11.1.0\client_1

C:\oracle\product\11.1.0\client_2

两者的 tnsnames.ora 是这样的:

xxxx1_SERVICE=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = xxxx2)(PORT = xxx3))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = xxx4)
    )
  )

yyyy1_SERVICE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = yyyy2 )(PORT = yyyy3))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = yyyy4)
    )
  )

kkkk1_SERVICE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = kkkkk2 )(PORT = kkkk3))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = kkk4)
    )
  )

pppp1_SERVICE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ppppp2 )(PORT = pppp3))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = pppp4)
    )
  )

oooo1_SERVICE = (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ooooo2 )(PORT = oooo3))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = oooo4)
    )
  )

系统已使用上述设置启动并运行。我需要开发一个基于 EntityFramework 的新系统,这需要我使用更新版本的 Oracle.DataAccess.Dll (4.112)。

我想知道如何在不损害旧系统功能的情况下安装新客户端,以便两者可以并行工作:

注意:我确实尝试在以前的客户端上安装新的 ODP.NET,并且能够使用以下连接字符串连接到数据库:

数据 SOURCE=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=zzzzz1)(PORT=zzzzz2)))(CONNECT_DATA=(SERVICE_NAME=zzz3_SERVICE)));用户 ID=\"zzzz4\";密码=\"zzzz5\";

这是不可取的,因为 1- 它破坏了旧系统,因为由于 ODP.NET 中的升级,它不再可以连接到 Oracle 2- 连接字符串看起来很奇怪

如果有任何帮助,我将不胜感激,

谢谢, 艾丁

【问题讨论】:

    标签: oracle entity-framework odp.net tnsnames tns


    【解决方案1】:

    简短的回答:

    注意:我确实尝试在以前的客户端上安装新的 ODP.NET 并且能够使用以下连接连接到数据库 字符串...

    这表明您的新安装在 /Network/Admin 中没有 tnsnames.ora 和 sqlnet.ora。如果您对使用新 ODP.net 安装的旧客户端没问题,那么您可以从旧安装中复制它们,或者您可以使用 TNS_ADMIN 环境变量为所有实例指定全局位置,即 TNS_ADMIN=C:\MyOracleFilesDir

    长答案:

    当您安装新客户端时,它很可能还会将发布者策略文件安装到 GAC 中,以便在 assembly resolution process 期间将对旧 Oracle.DataAccess.dll 的引用重定向到新版本。 Oracle.DataAccess 然后通过注册表中的参数 (DllPath) 定位客户端。您可以通过在 .config 文件中设置 dllPath 来覆盖此位置:

    <configuration>
      <oracle.dataaccess.client>
        <add key="DllPath"            value="C:\yourotherpath"/>
      </oracle.dataaccess.client>
    </configuration>
    

    这通常是我所做的,但随着我对这一点的了解越来越多,我意识到我正在针对旧客户端强制使用更新的 dll。如果您的目标是不影响旧客户端,则更好的选择可能是从 GAC 中删除发布者策略(我认为它们甚至没有与完整的 ODAC 一起安装,只有 ODP.net):

    如果您需要重新安装它们,它们通常位于 oraclepath\odp.net\PublisherPolicy。

    另一个,也许是更好的长期选择,是配置旧客户端忽略发布者政策: http://msdn.microsoft.com/en-us/library/cf9025zt%28v=vs.80%29.aspx

    最后,我很确定 2.0 与 4.0 框架的 .net 组件在 ODP.net 安装期间是单独的安装选项。我认为您可以通过不安装 2.0 组件来避免此问题。在那一点上,您可以通过针对 64 位 odp.net 开发新项目来做类似的工作。像v2​​.0和v4.0一样,32位和64位也没有任何相互认识。

    【讨论】:

    • 非常感谢。您给出了非常好的和详细的答复。在你的帮助下,我能够解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多