Клиент Oracle 11g, подключающийся к базам данных 10g и 11g

Я видел несколько сообщений, в которых говорится, что клиент Oracle 11g (для Windows) отлично работает с базами данных до 9.2. Но если клиент иногда подключается к базам данных 11g, а иногда и к базам данных 10g, он все еще работает? У меня такой вопрос: можно ли что-то настроить по-разному при подключении к базам данных 10g и 11g?

Некоторые люди рассказали мне о политике GAC.

Спасибо !


person Patrice Cote    schedule 20.02.2012    source источник


Ответы (2)


Обычно нет проблем с подключением к старой базе данных Oracle с более новым клиентским драйвером, например. для подключения к базе данных 10g или 11g с клиентом 12g. Остальная часть ответа относится к техническим проблемам, которые могут возникнуть в вашей программе .Net в случае, если клиент Oracle (возможно) уже установлен на компьютере, на котором выполняется ваша программа.


Обновление 2014 г.:

Тем временем Oracle выпустила управляемый драйвер .Net для базы данных Oracle. Таким образом, вместо установки локального клиента Oracle или доставки Instant Client вместе с вашим приложением предпочтительным способом должна быть доставка только управляемого драйвера без каких-либо зависимостей от локальных конфигураций. Тогда у вас не будет проблем с установленными клиентами, GAC, версией базы данных Oracle и так далее. Вы можете загрузить управляемый драйвер с веб-сайта Oracle.


Предыдущий ответ все еще необходим, если вы не можете использовать управляемый драйвер:

Проблемы начинаются, если вы не знаете, установлен ли клиент Oracle на ваших клиентских рабочих станциях. Если вы говорите о GAC, я полагаю, вы не знаете, установлен ли клиент Oracle, и если да, то какая у него версия.

Если вы не хотите полагаться на установленный Oracle Client, вы можете установить Oracle Instant Client вместе со своим приложением .Net. Например, вы можете загрузить ODAC 11.2, выпуск 4 (11.2.0.3.0 ) с инструментами разработчика Oracle для Visual Studio, что позволяет установить клиент Oracle для рабочей станции разработчика (с поддержкой Visual Studio для разработки наборов данных и EntityFramework), а также все файлы, необходимые для мгновенного клиента.

Для мгновенного клиента вам потребуются следующие файлы (ищите их в подпапках вашей установки ODAC):

  • oci.dll
  • ociw32.dll
  • Oracle.DataAccess.dll
  • orannzsbb11.dll
  • oraociicus11.dll (если вы используете английский язык, иначе соответствующий .dll)
  • OraOpd11w.dll
  • tnsnames.ora (если вам это нужно)

Кроме того, необходимы следующие файлы .dll из каталога Windows:

  • mfc71.dll
  • msvcr71.dll

Просто скопируйте все эти файлы в рабочий каталог вашего приложения (где находится файл .exe).

Какое отношение это имеет к GAC?

Если на клиентском компьютере установлен клиент Oracle, в GAC также есть Oracle.DataAccess.dll. Также возможно, что была установлена ​​политика, которая гласит что-то вроде: Независимо от Oracle.DataAccess.dll, на которую ссылается ваша программа, версия Oracle.DataAccess.dll из ваш GAC должен всегда использоваться. Если вы установите ODAC, на который я ссылался выше, вы найдете этот файл в

C:\Windows\Microsoft.NET\assembly\GAC_32\Policy.4.112.Oracle.DataAccess\v4.0_4.112.3.0__89b483f429c47342

В результате ваше .Net-приложение всегда выдает исключение, если вы пытаетесь загрузить Oracle.DataAccess.dll (с сообщением об ошибке типа "Поставщик несовместим..."), если на клиентском компьютере установлена ​​другая версия Установлен Oracle Client 11, а не тот, на который вы ссылаетесь в своем приложении.

Чтобы решить эту проблему, вы можете настроить свой app.conf так, чтобы политика издателя игнорировалась и всегда загружалась ваша версия:

<configuration>
...
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342" />
        <publisherPolicy apply="no" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
person Desty    schedule 20.02.2012
comment
Мы государственное учреждение, поэтому контролируем то, что установлено на машинах. Это будет везде одна и та же версия клиента. Но я принимаю к сведению ваш ответ, поэтому, если мы увидим странную ошибку, я буду знать, с чего начать поиск. Спасибо ! - person Patrice Cote; 21.02.2012
comment
@ ultraman69 В этом случае вы будете спать спокойно по ночам :) Поскольку вы всегда используете один и тот же клиент на всех машинах, никакие проблемы GAC или политики не помешают вам. Пока вы используете стандартные интерфейсы Oracle.DataAccess.dll, вы можете подключаться к любой БД версии ›9.2. Конечно, специальные функции/SQL 11g не будут работать в более ранних версиях. - person Desty; 21.02.2012
comment
@Detsy У меня есть и веб-сервис, и я не могу установить его на 32 бита. Могу ли я использовать 64-разрядную версию мгновенного клиента ODC с такими же шагами? - person Laggel; 28.04.2014
comment
@Laggel Хотя у меня нет опыта использования 64-битного драйвера, вы можете загрузить его с веб-сайта Oracle, поэтому я предполагаю, что в принципе он должен работать так же. Однако сегодня вы можете и должны использовать управляемый .Net-драйвер от Oracle, который устраняет необходимость в доставке мгновенного клиента. Я обновил свой ответ, чтобы отразить это, и надеюсь, что он будет вам полезен. - person Desty; 29.04.2014
comment
@Detsy Я хотел бы иметь возможность использовать управляемую версию. Но он доступен только для клиента 12c, и когда я попытался использовать его для подключения к базе данных 10g, я не смог. - person Laggel; 29.04.2014

У меня не было никаких проблем с JAVA или .Net. Фактически, Oracle говорит, что все в порядке:

Релиз включает клиент Oracle Database 11.2.0.3, который может получить доступ к Oracle Database 9.2 и выше. Oracle поддерживает Entity Framework и LINQ с Microsoft Visual Studio 2010 и .NET Framework 4, включая Entity Framework 4.1 и 4.2. Code First не поддерживается в этом выпуске.

Очевидно, вы хотели бы протестировать одни и те же процессы, подключаясь к каждому из них и проверяя свои собственные тесты, но я думаю, у вас все будет хорошо.

person northpole    schedule 20.02.2012