Как да инсталирате ODP.NET 2.111 и ODP.NET 4.112 на една и съща машина една до друга, докато и двете сочат към един и същ сървър на база данни

Въпросът е как да инсталирате 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 върху предишния клиент и успях да се свържа с база данни, използвайки следния низ за връзка:

DATA SOURCE=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=zzzzz1)(PORT=zzzzz2)))(CONNECT_DATA=(SERVICE_NAME=zzz3_SERVICE)));Потребителски ID=\"zzzz4\";Парола =\"zzzz5\";

Това не е желателно, защото 1- Разрушава наследената система, защото вече не може да се свърже с Oracle поради надстройката в ODP.NET 2- Низът за връзка изглежда много странно

Ще се радвам на всяка помощ,

Благодаря, Айдин


person Aidin    schedule 19.03.2013    source източник


Отговори (1)


Краткият отговор:

Забележка: Опитах се да инсталирам новия ODP.NET върху предишния клиент и успях да се свържа с база данни, използвайки следния низ за свързване...

Това показва, че вашата нова инсталация няма tnsnames.ora и sqlnet.ora в /Network/Admin. Ако сте добре със стария клиент, използващ новата инсталация на ODP.net, можете или да ги копирате от старата инсталация, или можете да посочите глобално местоположение за всички екземпляри с TNS_ADMIN променлива на средата, т.е. TNS_ADMIN=C:\MyOracleFilesDir

Дългият отговор:

Когато сте инсталирали новия клиент, той най-вероятно също е инсталирал файлове с правила на издателя в GAC, които пренасочват препратките към стария Oracle.DataAccess.dll към новата версия по време на процес на разрешаване на сглобяването. След това Oracle.DataAccess намира клиента чрез параметър (DllPath) в системния регистър. Можете да замените това местоположение, като зададете dllPath във вашия .config файл:

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

По принцип това е, което правя, но докато разбирам това по-добре, осъзнавам, че принуждавам по-нова dll срещу по-стар клиент. Ако целта ви е да оставите стария клиент недокоснат, по-добър вариант може да бъде да изтриете правилата на издателя от GAC (не мисля, че дори са инсталирани с пълната инсталация на ODAC, само ODP.net):

Екранна снимка на GAC

Ако трябва да ги преинсталирате, те обикновено се намират на oraclepath\odp.net\PublisherPolicy.

Друг и може би по-добър дългосрочен вариант е да конфигурирате старите клиенти да игнорират правилата на издателя: http://msdn.microsoft.com/en-us/library/cf9025zt%28v=vs.80%29.aspx

И накрая, почти съм сигурен, че .net компонентите за рамките 2.0 срещу 4.0 са отделни опции за инсталиране по време на инсталацията на ODP.net. Мисля, че можете да избегнете този проблем просто като не инсталирате компонентите 2.0. На тази бележка бихте могли да направите подобна работа, като вместо това разработите новия си проект срещу 64-битовия odp.net. Подобно на v2.0 и v4.0, 32-битовите и 64-битовите също не се познават.

person b_levitt    schedule 19.03.2013
comment
Благодаря много. Дадохте много добър и подробен отговор. Успях да се погрижа за ситуацията с ваша помощ. - person Aidin; 21.03.2013