Estoy tratando de usar Oracle ODP.NET 11g (11.1.0.6.20) Instant Client en mi proyecto ASP.net como proveedor de datos, pero cuando ejecuto la página aspx aparece el mensaje " El proveedor no es compatible con la versión del mensaje de error del cliente Oracle ". Cualquier ayuda sería apreciada.
He hecho referencia al proveedor de datos en Visual Studio 2005 y el código detrás se ve así:
using Oracle.DataAccess.Client;
..
OracleConnection oOracleConn = new OracleConnection();
oOracleConn.ConnectionString =
"Data Source=MyOracleServerName;" +
"Integrated Security=SSPI";
oOracleConn.Open();
//Do Something
oOracleConn.Close();
El error para la página se ve así:
Exception Details: Oracle.DataAccess.Client.OracleException: The provider is not compatible with the version of Oracle client
Source Error:
Line 21:
Line 22:
Line 23: OracleConnection oOracleConn = new OracleConnection();
Line 24: oOracleConn.ConnectionString =
Line 25: "Data Source=MyOracleServerName;" +
[OracleException (0x80004005): The provider is not compatible with the version of Oracle client]
Oracle.DataAccess.Client.OracleInit.Initialize() +494
Oracle.DataAccess.Client.OracleConnection..cctor() +483
Stack Trace:
[TypeInitializationException: The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception.]
Oracle.DataAccess.Client.OracleConnection..ctor() +0
Boeing.IVX.Web.RoyTesting.Page_Load(Object sender, EventArgs e) in C:\Documents and Settings\CE218C\Desktop\IVX.Net\Web\IVX\RoyTesting.aspx.cs:23
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +33
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +47
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436
Debe "ignorar" toda la charla x86 / x64 aquí para empezar y, en su lugar, probar el controlador administrado ODP.NET (si está utilizando .Net v4 +):
https://www.nuget.org/packages/Oracle.ManagedDataAccess/
https://www.nuget.org/packages/Oracle.ManagedDataAccess.EntityFramework/
Controlador Oracle ODP.net administrado vs no administrado
¡Evite todos los "no administrados" qué DLL emite la arquitectura! : D (sobre el tiempo Oracle).
El paquete NuGet (también funciona para 11g):
El método antiguo / manual:
Para obtener información sobre cómo convertir a usar las bibliotecas administradas :
fuente
readme
resumen de algunas limitaciones.Solo instalé Oracle Data Provider para .NET 2.0 (11.1.0.6.20) y no instalé Oracle Instant Client (11.1.0.6.0) .
¡Lo acabo de instalar y el error desapareció!
fuente
Esto puede ser causado al ejecutar un tiempo de ejecución .NET de 64 bits contra un cliente Oracle de 32 bits. Esto puede suceder si su servidor está ejecutando la aplicación en 64 bits. Ejecutará la aplicación .NET con el tiempo de ejecución de 64 bits. Puede configurar el indicador de CPU en su proyecto en VS para que se ejecute en el tiempo de ejecución de 32 bits.
fuente
Hagamos algún tipo de resumen:
El mensaje de error "El proveedor no es compatible con la versión del cliente Oracle" puede deberse a varias razones.
No tiene instalado el Cliente Oracle. En este caso, el mensaje de error es realmente engañoso.
Oracle Data Provider para .NET (ODP.NET, es decir, archivo
Oracle.DataAccess.dll
) no está incluido en Oracle cliente inmediato, tiene que ser instalado por separado (descarga de 32 bits de Oracle Data Access Components (ODAC) o de 64 bits de Oracle Data Access Components ( ODAC) Descargas ) o debe seleccionar según la opción en Oracle Universal Installer (OUI).Tenga en cuenta que al instalar Oracle Data Provider> = 12.1, el proveedor no se registra automáticamente en GAC. Debe registrarlo manualmente si es necesario, consulte Oracle Doc 2272241.1 .
La versión de ODP.NET no coincide con la versión instalada de Oracle Client. ¡Debe verificar incluso el número de versión menor! Por ejemplo, la
Oracle.DataAccess.dll
versión 4.112.3.0 no es compatible con Oracle Client 11.2.0.4 . Verifique cuidadosamente las versiones de ODP.NET y Oracle Client. Puede usar sigcheck enoraociei*.dll
y / oOraOps*w.dll
para obtener la versión de Oracle Client.Tenga en cuenta los diferentes esquemas de numeración. Versión del archivo 4.112.3.0 medios: .NET Framework versión 4, Oracle Release 11.2.0.3.x .
Hay ODP.NET versión "1.x", "2.x" y "4.x". Estos números están relacionados con las versiones de Microsoft .NET Framework 1.0.3705 / 1.1.4322, 2.0.50727 y 4.0.30319. La versión "1.x" estuvo disponible hasta Oracle Client 11.1. La versión "4.x" se introdujo con Oracle Client 11.2
La arquitectura (32 bits o 64 bits) de ODP.NET no coincide con la arquitectura de su aplicación. Una aplicación de 32 bits solo funciona con Oracle Client / ODP.NET de 32 bits, respectivamente, una aplicación de 64 bits requiere Oracle Client / ODP.NET de 64 bits. (A menos que use el controlador administrado ODP.NET )
La versión de .NET Framework no coincide. Por ejemplo, si compila su aplicación con Target .NET Framework 2.0, entonces no puede usar ODP.NET versión 4.x. La versión de destino de .NET Framework debe ser igual o superior a la versión de ODP.NET.
La versión de
Oracle.DataAccess.dll
en su máquina de desarrollo (es decir, la versión que se carga durante la compilación) es más alta que la versión en la máquina de destino.Tenga en cuenta que
Oracle.DataAccess.dll
podría cargarse desde GAC, que por defecto tiene prioridad sobre cualquier archivo proporcionado localmente.Soluciones
Considere usar el controlador administrado ODP.NET, se puede descargar desde la página de Oracle: Descargas de componentes de acceso a datos de Oracle (ODAC) de 64 bits . Allí solo tiene que copiar el
Oracle.ManagedDataAccess.dll
archivo a su directorio de aplicaciones, no se requiere nada más. Funciona tanto para 32 bits como para 64 bits.En su
*.csproj
, resp.*.vbproj
edite su referencia a ODP.NET así:Atributos como
Version=...
oprocessorArchitecture=...
no son obligatorios.Su aplicación cargará la correcta-> no 100% verificadoOracle.DataAccess.dll
según la arquitectura seleccionada y el marco .NET de destino (siempre que esté instalado correctamente)En caso de que no conozca la versión de Oracle Client en la máquina de destino (por ejemplo, podría ser la máquina de su cliente): vaya a la página de descarga mencionada anteriormente y descargue la versión mínima de XCopy de Oracle Data Access Components. Extraiga el zip y copie solo el
Oracle.DataAccess.dll
archivo en su máquina local. En su proyecto VS haga una referencia a esta DLL (muy probablemente desactualizada). La versión de esta DLL es la versión mínima de ODP.NET con la que funcionará su aplicación. Cuando ejecuta su aplicación, la Política del editor en GAC redirigirá a la versión realmente instalada.No creo que sea un enfoque inteligente tomar archivos DLL individuales y copiarlos en ciertas carpetas. Puede funcionar en una máquina "desnuda", pero si su máquina de destino ha instalado algún producto Oracle, existe un alto riesgo de desajuste de versión. Desinstale cualquier producto Oracle de su máquina y realice una nueva instalación. Eche un vistazo a ¿Cómo desinstalar / eliminar completamente Oracle 11g (cliente)? Para obtener una máquina realmente limpia.
En caso de que tenga que trabajar con aplicaciones de 32 bits y 64 bits al mismo tiempo, siga estas instrucciones para instalar ambas versiones en una máquina:
Suposiciones: se llama Oracle Home
OraClient11g_home1
, la versión del cliente es 11gR2.Opcionalmente, elimine cualquier cliente Oracle instalado
Descargue e instale Oracle x86 Client, por ejemplo en
C:\Oracle\11.2\Client_x86
Descargue e instale Oracle x64 Client en una carpeta diferente, por ejemplo para
C:\Oracle\11.2\Client_x64
Abra la herramienta de línea de comandos, vaya a la carpeta% WINDIR% \ System32, normalmente
C:\Windows\System32
y cree un enlace simbólicoora112
a la carpetaC:\Oracle\11.2\Client_x64
(ver más abajo)Cambie a la carpeta% WINDIR% \ SysWOW64, por lo general,
C:\Windows\SysWOW64
y cree un enlace simbólicoora112
a la carpetaC:\Oracle\11.2\Client_x86
(ver más abajo)Modifique la
PATH
variable de entorno, reemplace todas las entradas comoC:\Oracle\11.2\Client_x86
yC:\Oracle\11.2\Client_x64
porC:\Windows\System32\ora112
, respectivamente, su\bin
subcarpeta. Nota:C:\Windows\SysWOW64\ora112
no debe estar en el entorno PATH.Si es necesario, configure su
ORACLE_HOME
variable de entorno enC:\Windows\System32\ora112
Abre tu Editor del Registro. Establezca el valor del Registro
HKLM\Software\ORACLE\KEY_OraClient11g_home1\ORACLE_HOME
enC:\Windows\System32\ora112
Establecer el valor del Registro
HKLM\Software\Wow6432Node\ORACLE\KEY_OraClient11g_home1\ORACLE_HOME
enC:\Windows\System32\ora112
(noC:\Windows\SysWOW64\ora112
)¡Estás listo! Ahora puede usar el cliente Oracle x86 y x64 sin problemas juntos, es decir, una aplicación x86 cargará las bibliotecas x86, una aplicación x64 cargará las bibliotecas x64 sin ninguna modificación adicional en su sistema.
Comandos para crear enlaces simbólicos:
Algunas notas:
Ambos enlaces simbólicos deben tener el mismo nombre, por ejemplo
ora112
.En caso de que luego desee instalar ODP.NET manualmente, asegúrese de seleccionar las carpetas apropiadas para la instalación.
A pesar de su carpeta de nombres
C:\Windows\System32
contiene las bibliotecas x64, mientras queC:\Windows\SysWOW64
contiene las bibliotecas x86 (32 bits). No te confundasTal vez sea una buena opción configurar su
TNS_ADMIN
variable de entorno (TNS_ADMIN
entradas de registro en el Registro) en una ubicación común, por ejemploTNS_ADMIN=C:\Oracle\Common\network
.fuente
Oracle.DataAccess.dll
desde el paquete nugetOracle.DataAccess.x86
, y su versión Dll es2.112.1.0
, por lo que coincido con la instalación del Cliente Oracle con la versiónOracle Database 11g Release 2 Client (11.2.0.1.0) for Microsoft Windows (x64)
AQUÍ, ¡ luego se solucionó el problema!Después de varias horas de resolución de problemas, descubrí que este problema se debía a que tenía Oracle.DataAccess.dll (v4.0) en mi directorio bin de proyectos, pero el tiempo de ejecución también cargaba Oracle.DataAccess.dll (v2.x) desde el GAC. Eliminar y leer la entrada Oracle.DataAccess en las referencias del proyecto resolvió el problema para mí.
Los otros archivos mencionados aquí no parecían necesarios en mi situación.
ACTUALIZAR
La causa raíz del error "El proveedor no es compatible con la versión del cliente Oracle" es (generalmente) que el ensamblado administrado está intentando cargar bibliotecas no administradas que no coinciden con las versiones. Parece que puede forzar al controlador de Oracle a usar las bibliotecas correctas especificando la ruta de la biblioteca en web.config 1
fuente
instale ODP.Net en la máquina de destino y debería resolver el problema ... copiar la dll no parece una buena idea ...
fuente
Para Oracle 11g (11.1.0.7.20) tuve que agregar los siguientes dlls junto con mi Exe para trabajar.
fuente
Me parece que a pesar de que tiene ODP con el Cliente Oracle Istant, el ODP puede estar tratando de usar el Cliente Oracle real. ¿También tiene un cliente Oracle estándar instalado en la máquina? Recuerdo que Oracle era bastante exigente cuando se trataba de múltiples clientes en la misma máquina.
fuente
Tuve exactamente el mismo problema. Eliminé (y olvidé que había eliminado) oraociei11.dll después de compilar la aplicación. Y estaba dando este error al intentar ejecutar. Entonces, cuando no puede encontrar el dll que oraociei11.dll, muestra este error. Puede haber otros casos cuando da este error, pero este parece ser uno de ellos.
fuente
También busque el grupo de aplicaciones IIS Habilite la marca de verdadero o falso de 32 bits, cuando vea este mensaje, ¡algún foro de Oracle me lo pidió!
fuente
Tengo el mismo problema, pero en mi caso no puedo simplemente copiar los archivos DLL en la carpeta bin, luego solo 'vuelvo a unir' la versión de ensamblaje.
fuente
Esto es lo que hice para resolver este problema que persistió durante 3 largas horas:
En la casa de Oracle ubicada en
C:\oracle\product\11.2.0
, tenía una carpeta llamadaclient_1
donde había instalado previamenteODP.NET
bits para Windows de 64 bits.Más tarde, al intentar depurar mi aplicación API web ASP.NET con Visual Studio 2012, recibí este mensaje de error: el proveedor no es compatible con la versión del cliente Oracle .
Al buscar en Google, descubrí que esto estaba sucediendo porque estaba usando
ODP.NET
64 bits. Luego toméODP.NET
Windows 32 bits y lo instalé, pero seguía recibiendo el mismo mensaje de error.SOLUCIÓN: eliminó la carpeta
client_1
y reinstalóODP.NET
32 bits. De alguna manera, el instalador estaba mezclando bits de la versión de 64 bits con la versión de 32 bits. Imagínate...Ahora estoy feliz otra vez y puedo abrir una nueva
OracleConnection
. ¡FINALMENTE! :)fuente
Para cualquiera que todavía tenga este problema: según este artículo
http://oradim.blogspot.com/2009/09/odpnet-provider-is-not-compatible-with.html
Descubrí que a mi servidor le faltaba la Biblioteca Visual Runtime de Microsoft C ++: la tenía en mi máquina de desarrollo debido a la instalación de Visual Studio. Descargué e instalé la versión (actualmente) más reciente de la biblioteca desde aquí:
http://www.microsoft.com/en-us/download/details.aspx?id=13523
Ejecuté la configuración y la llamada oráculo de C # lo hizo.
fuente
Versión TLDR:
Versión completa:
Primero, asegurémonos de que comprendamos los componentes del antiguo proveedor no modificado (no el nuevo proveedor 12c 100% administrado). Se compone de dos piezas:
Simplemente hablando, Oracle.DataAccess.dll es casi solo un contenedor, traduciendo instrucciones .net en instrucciones ORACLE-NET para el cliente no administrado.
Dicho esto, cuando carga Oracle.DataAccess hay un orden en el que intenta localizar los dlls de clientes no administrados que necesita. De la documentación de Oracle :
Entonces, en su caso, su aplicación siguió este proceso anterior y encontró una ruta que tiene dlls no gestionados que son demasiado antiguos en relación con el ensamblado Oracle.DataAccess.dll que está utilizando.
Podría ser que la única instalación de Oracle Client en esa máquina sea demasiado antigua. Pero esto entra en juego si tiene más de un cliente instalado en la máquina y los archivos no administrados se encontraron primero en una instalación diferente pero más antigua. Si es más tarde, lo más simple es usar la variable de configuración dllPath en su configuración y apuntarla a la carpeta correcta de Oracle Home Bin:
Si desea instalar una copia nueva del cliente, la versión de xcopy es la más pequeña y contiene el "cliente instantáneo" y señala el DllPath anterior a esta nueva ubicación. Pero cualquier instalación del cliente Oracle funcionará.
Pero si desea evitar todas estas cosas de resolución de clientes no administrados, vea si puede actualizar su aplicación para usar el proveedor 100% administrado; en realidad, solo se trata de uno o dos ensamblados administrados, sin ninguna dependencia de los archivos no administrados.
También es posible que no esté cargando el Oracle.DataAccess.dll que cree que está si está instalado tanto en su directorio bin como en su GAC, pero creo que ese es el senario menos probable. Consulte el proceso de resolución de ensamblaje para obtener más información.
fuente
¿El usuario IIS / IWAM tiene permisos en el directorio de Oracle? ¿Se puede conectar a esta fuente de datos utilizando otra aplicación, como Excel o Access?
fuente
Tuvimos el mismo problema, porque el ensamblado Oracle.Data.dll en un recurso compartido de red fue actualizado por nuestros DBA. Eliminar la referencia del proyecto y agregarla nuevamente resolvió el problema.
fuente
Solo dos pasos para resolver este problema.
la mejor de las suertes.
fuente
No fui por el camino de conseguir nuevas DLL. Teníamos un montón de proyectos existentes que funcionan perfectamente bien y fue solo mi nuevo proyecto el que me dio dolor de cabeza, así que decidí probar otra cosa.
Mi proyecto estaba usando un Internal.dll desarrollado internamente que dependía de Oracle.DataAccess.dll
v4.112.3.0
. Por alguna razón, cuando se publica, Visual Studio siempre se cargav4.121.0.0
, aunque no se especificó explícitamente en ninguno de los archivos de configuración. Es por eso que recibí un error.Entonces lo que hice fue:
/bin
(solo para estar seguro)./bin
.myWebSite.csproj
, pero mostró la versión incorrecta: env4.121.0.0
lugar dev4.112.3.0
.Cambié manualmente la referencia
myWebSite.csproj
, por lo que ahora se lee:fuente
bin
yobj
son carpetas de salida ; aquí es donde van los dlls cuando construyes tu proyecto. Debería poder eliminar estas carpetas en cualquier momento sin crear conflictos. Por lo general, estas carpetas se ignoran en el control de origen. La práctica estándar es crear unaExternal References
carpeta donde coloque sus dlls referenciados.HintPath
completo.Encontré este problema después de instalar Oracle Data Tools para Visual Studio 2015 y luego pelear con Oracle durante una buena hora. Decidí intentar reinstalar el cliente Oracle nuevamente en lugar de este lío con la copia de archivos, cambios de configuración, etc., y eso funcionó para mí.
fuente
Me enfrenté a un problema similar y la causa raíz fue que GAC tenía 2 versiones de oracle.dataaccess, es decir, v4.0_4.112.2.0 y v4.0_4.112.4.0. Mi aplicación se refería a v4.0_4.112.2.0, por lo que cuando eliminé v4.0_4.112.4.0 de GAC, funcionó bien.
Ruta de acceso de GAC: C: \ Windows \ Microsoft.NET \ assembly \ GAC_64 \ Oracle.DataAccess
Antes de :
Después :
Para eliminar una versión, uno simplemente puede eliminar la carpeta correspondiente de GAC.
fuente
Recientemente tuve que trabajar en un proyecto anterior donde la solución y todos los proyectos contenidos estaban dirigidos a la plataforma x32. Seguí intentando copiar Oracle.DataAccess.dll y todos los demás archivos de Oracle sugeridos en todos los lugares, pero siempre me golpeé contra la pared. Finalmente, la bombilla de la cabeza se encendió (después de 8 horas :)) y solicitó verificar los ensambles ODAC instalados y su plataforma. Ya tenía todos los clientes ODAC de 64 bits (x64) instalados pero no los de 32 bits (x32). Instalé el ODAC de 32 bits y el problema desapareció.
Cómo verificar la versión de ODAC instalado: Busque en la carpeta C: \ Windows \ assembly. La propiedad "Arquitectura del procesador" informará a la plataforma de ODAC instalado.
Ocho horas es mucho tiempo para que se encienda la bombilla. No es de extrañar que siempre tenga que esforzarme en el trabajo :).
fuente
C:\Windows\assemblies
solo muestra ensamblados hasta .NET Framework versión 2.0. La versión 3.x / 4.x no se muestra, consulte stackoverflow.com/questions/28213105/…La solución de Chris también funcionó para mí. Sin embargo, recibí un mensaje de error de seguimiento que dice:
Aparentemente, en el idioma extranjero de Oraclish, eso significa que su programa está dirigido a todas las plataformas o máquinas de 32 bits. Simplemente cambie su plataforma de destino en Project Properties a 64 bits y espere lo mejor.
fuente
Tuve el mismo problema con Oracle.DataAccess.dll v4.121.2.0. con instalación en 2 hogares (versiones de 32 y 64 bits). Versión de 32 bits de trabajador, la versión de 64 bits no.
En mi caso (después de 2 días de intentarlo) descubrí que el problema eran los permisos en la versión de inicio de 64 bits. Muchos directorios en esa versión tenían permisos anulados exclusivamente donde el rol de "Usuarios autenticados" no tenía acceso de "Lectura", que está configurado de manera predeterminada en el directorio principal. Esos subdirectorios incluyeron "bin", "network / admin", "nls", "oracore", "RDBMS" y posiblemente otros. Los encontré filtrando el resultado "ACCESO DENEGADO" en la utilidad "Process Monitor" (Procmon.exe) de sysinternals. Una vez que los permisos se heredaron del directorio principal a esos subdirectorios secundarios, todo comenzó a funcionar.
No supe qué anular los permisos en toda la página de inicio de Oracle, así que hice un directorio a la vez, pero supongo que si no te preocupas tanto por la seguridad, puedes restablecerlo en todo el directorio de inicio de Oracle correspondiente.
fuente
http://randomdevtips.blogspot.com/2012/06/provider-is-not-compatible-with-version.html
fuente
Muchas respuestas teóricas aquí, pero aquí viene un ejemplo de trabajo con código que puede copiar, pegar y probar de inmediato:
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.112.4.0\DllPath
. En máquinas de 64 bits, escriba adicionalmente enHKLM\SOFTWARE\Wow6432Node\Oracle\...
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.121.2.0\DllPath
Oracle.ManagedDataAccess.dll
que solo tiene 4 MB y es un archivo DLL administrado puro que funciona en procesos de 32 bits y 64 bits también y no depende de ninguna otra DLL y no requiere ninguna entrada de registro.fuente
Oracle.DataAccess.dll
el ¡El programa carga en total 35 DLL de Oracle! Realice una instalación normal de Oracle Client, a menos que utilice el controlador administrado ODP.NET, por supuesto.oracle.key
). Por compatibilidad, también debe tener en cuenta las versiones menores.Oracle.DataAccess, Version=2.112.2.0
no funciona con laOraOps11w.dll
versión 2.112.4.0 por ejemplo.