Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why doesn't ODP.NET 11 xcopy deployment work on a machine with Oracle DB 10 installed?

Tags:

oracle

odp.net

I have an app that uses a local version of ODAC 11 below the directory that the .exe file is in. The idea is that we want our app to use the local ODAC 11 regardless of what else the user has installed on her machine.

Oracle.DataAccess.dll is in the same directory as the .exe.

It works fine when the client machine has no Oracle client installed, but I get an error when starting it on a machine with Oracle Database 10.2.0.something installed:

The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception.

[Stack Trace]

The provider is not compatible with the version of Oracle client
OracleException
   at Oracle.DataAccess.Client.OracleInit.Initialize()
   at Oracle.DataAccess.Client.OracleConnection..cctor()

I'm guessing that this has something to do with the runtime binding policy, but a search for "Oracle/ODAC/ODP.NET runtime binding policy" on Google has not turned up anything useful.

Does anyone know how to resolve the issue?

If not this specific issue, can someone point me towards an overview of how to do what I want to do: make sure that my application uses the ODAC 11 no matter what?

like image 410
Josh Kodroff Avatar asked Jan 29 '09 14:01

Josh Kodroff


People also ask

Does ODP net core require Oracle client?

Managed ODP.NET does not require any Oracle Client installation. The final step is to configure the database server connection, which is specific to your application environment. A sample Oracle connect descriptor and connection string have been created.

What is ODP Net Oracle?

Oracle Data Provider for . NET (ODP.NET) features optimized ADO.NET data access to the Oracle database. ODP.NET allows developers to take advantage of advanced Oracle database functionality, including Real Application Clusters, self-tuning statement cache, Application Continuity, and Fast Connection Failover.

What is Oracle XCopy?

Administrators use XCopy to deploy Oracle Data Provider for . NET to large numbers of computers for production deployments. The XCopy has a smaller installation size and fine-grain control during installation and configuration than Oracle Universal Installer.


2 Answers

So as I understand it, the issue was that while Oracle.DataAccess.dll was in the same directory as the app, it could not find its lower-level homies (oci, et al), hence the compatibility error.

Turns out that if you want an application to work with ODAC 11 xcopy deployment regardless of what else the user may have installed on her machine, you need to do 2 things:

  1. Set the PATH environment variable for the process. (I was already doing this.)
  2. Set the ORACLE_HOME environment variable for the process. (I was not doing this.)

    Environment.SetEnvironmentVariable("PATH", Environment.CurrentDirectory + "\\oracle\\11.1\\odac;" + Environment.CurrentDirectory + "\\oracle\\11.1\\odac\\bin;", EnvironmentVariableTarget.Process);
    Environment.SetEnvironmentVariable("ORACLE_HOME", Environment.CurrentDirectory + "\\oracle\\11.1\\odac", EnvironmentVariableTarget.Process);
    

EDIT: It's also important to note that Oracle will throw this error not just for environmental issues, but also if one of the files is missing on the target machine. I got this same error on other machines despite the Environment settings because I had Subversion set to ignore directories called "bin", so the OraOps DLL was not being copied to the client.

like image 67
Josh Kodroff Avatar answered Nov 15 '22 04:11

Josh Kodroff


An article titled "Deploying ODP.NET with Oracle Instant Client" found at http://alderprogs.blogspot.com/2009/04/deploying-odpnet-with-oracle-instant.html gave what was for me about the best explanation of how to deliver a stripped down xcopy type deployment with your application. Only 5 Oracle DLLs required for support.

That said the answers by ObiWanKenobi and Josh Kodroff provides important additional info which matches with my experience.

Add to that: http://www.brothersincode.com/post/Oracle-ODPnet-xcopy-deployment-for-aspnet.aspx

like image 25
AnthonyVO Avatar answered Nov 15 '22 03:11

AnthonyVO