2012-02-20 20 views
6

He visto algunas publicaciones que dicen que Oracle 11g Client (para Windows) funciona bien con bases de datos de hasta 9.2. Pero si el cliente a veces se conecta a bases de datos 11g y algunas veces a 10g, ¿sigue funcionando? Mi pregunta es: ¿hay algo para configurar de manera diferente cuando se conecta a las bases de datos 10g y 11g?Oracle 11g Cliente que se conecta a ambas bases de datos 10g y 11g

Algunas personas me han hablado sobre las políticas en el GAC.

Gracias!

Respuesta

8

Normalmente no hay problema para conectarse a una base de datos Oracle más antigua con un controlador de cliente más nuevo, p. Ej. para conectarse a una base de datos de 10g u 11g con un cliente de 12g. El resto de la respuesta corresponde a problemas técnicos que pueden ocurrir en su programa .Net en el caso de que ya esté (quizás) instalado Oracle Client en la computadora que ejecuta su programa.


Actualización 2014:

Mientras tanto Oracle ha publicado un controlador administrado de .NET para la base de datos Oracle. Por lo tanto, en lugar de instalar un cliente Oracle local o entregar un cliente instantáneo junto con su aplicación, la forma preferida debería ser entregar solo el controlador administrado sin dependencias a las configuraciones locales. Entonces no tiene problemas con los clientes instalados, el GAC, la versión de la base de datos de Oracle, etc. Puede descargar el controlador administrado desde the Oracle website.


respuesta anterior, todavía es necesario si no se puede utilizar el controlador administrado:

Los problemas comienzan si usted no sabe si hay un cliente de Oracle instalado en sus estaciones de trabajo cliente . Si está hablando de GAC , supongo que no sabe si está instalado Oracle Client y, de ser así, qué versión es.

Si no desea confiar en un Cliente Oracle instalado, puede entregar un Oracle Instant Client con su aplicación .Net. Por ejemplo, puede descargar ODAC 11.2 Release 4 (11.2.0.3.0) with Oracle Developer Tools for Visual Studio, que le proporciona una instalación de Oracle Client para su estación de trabajo de desarrollador (con soporte de Visual Studio para desarrollo de DataSet y EntityFramework), así como todos los archivos necesarios para un cliente instantáneo.

Para un cliente de inmediato se necesitan los siguientes archivos (buscarlos en las subcarpetas de la instalación de ODAC):

  • oci.dll
  • OCIW32.DLL
  • Oracle.DataAccess.dll
  • orannzsbb11.dll
  • oraociicus11.dll (si está utilizando el lenguaje Inglés, de lo contrario el correspondiente .dll)
  • OraOpd11w.dll
  • tnsnames.ora (si lo necesita)

Además se necesitan los siguientes archivos .dll desde el directorio de Windows:

  • mfc71.dll
  • msvcr71.dll

Simplemente copie todos esos archivos en el directorio de trabajo de su aplicación (donde está el archivo .exe).

Ahora, ¿cómo le corresponde eso al GAC?

Si hay un cliente de Oracle instalado en el equipo del cliente, también hay un Oracle.DataAccess.dll en el GAC. También es posible, que una política se instaló que establece algo así como: Independiente del Oracle.DataAccess.dll su programa se hace referencia, se siempre utilizar la versión Oracle.DataAccess.dll de su GAC. Si instala el ODAC he vinculado anteriormente, usted encontrará que los archiveros bajo

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

El resultado es que su aplicación .Net siempre arroja una excepción si está intentando cargar Oracle.DataAccess.dll (con un mensaje de error como "El proveedor no es compatible ..."), si la máquina del cliente tiene otra versión de Oracle Client 11 instalada que la que está consultando en su aplicación.

Para resolver esto, puede configurar su app.conf para que la política editorial se tendrá en cuenta y siempre se carga la versión:

<configuration> 
... 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342" /> 
     <publisherPolicy apply="no" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 
+0

Somos una agencia de Gobierno, por lo tanto, podemos controlar lo que está instalado en las máquinas . Esta será la misma versión de cliente, en todas partes. Pero tomo nota de su respuesta, por lo que si vemos un error extraño, sabré por dónde empezar a buscar. Gracias ! –

+0

@ ultraman69 En este caso duerme tranquilo por la noche :) Dado que siempre usa el mismo cliente en todas las máquinas, ningún GAC o problema de política se interpondrá en su camino. Siempre que utilice las interfaces estándar de Oracle.DataAccess.dll, puede conectarse con cualquier versión de base de datos> 9.2. Por supuesto, 11g funciones específicas/SQL no funcionarán en versiones inferiores. – Desty

+0

@Detsy tengo y servicio web y no puedo configurarlo en 32 bits. ¿Puedo usar la versión del cliente instantáneo de 64 bits de la ODC con los mismos pasos? – Laggel

1

No he tenido ningún problema para hacer esto con JAVA o .Net. De hecho, Oracle dice que está perfectamente bien:

La versión incorpora cliente de base de datos Oracle 11.2.0.3, que puede el acceso de base de datos Oracle 9.2 y superior. Oracle admite Entity Framework y LINQ con Microsoft Visual Studio 2010 y .NET Framework 4, incluidos Entity Framework 4.1 y 4.2. Code First no es compatible en este lanzamiento.

Obviamente, usted querrá probar los mismos procesos mientras se conecta a cada uno y verifica a través de sus propias pruebas, pero creo que estará bien.

Cuestiones relacionadas