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

时间:2013-03-19 02:17:46

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

问题是如何在同一台机器上并排安装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 \产品\ 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,并且能够使用以下连接字符串连接到数据库:

  

DATA   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-连接字符串看起来很奇怪

我将不胜感激,

谢谢, Aidin

1 个答案:

答案 0 :(得分:0)

答案简短:

  

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

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

答案很长:

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

TNS_ADMIN=C:\MyOracleFilesDir

这通常就是我所做的,但正如我对此的理解更多,我意识到我正在强迫对较旧的客户端进行更新的dll。如果您的目标是保持旧客户端不变,那么更好的选择可能是从GAC中删除发布者策略(我认为它们甚至不会安装完整的ODAC,只有ODP.net):

GAC Screenshot

如果您需要重新安装它们,通常可以在oraclepath \ odp.net \ PublisherPolicy找到它们。

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

最后,我非常确定在ODP.net安装期间,2.0和4.0框架的.net组件是单独的安装选项。我认为你可以通过不安装2.0组件来避免这个问题。在那个注释中,您可以通过针对64位odp.net开发新项目来做类似的工作。与v2.0和v4.0一样,32位和64位也没有彼此的认识。