2.7 Configuring Oracle Data Provider for .NET
The settings for specific versions of ODP.NET, can be configured in several ways for specific effects on precedence:
-
The Windows registry entries are machine-wide settings for a particular version of ODP.NET.
Windows registry based configuration is not supported for ODP.NET, Managed Driver.
-
The
machine.config
settings are .NET framework-wide settings that override the Windows registry values. -
The application or web config file settings are application-specific settings that override the
machine.config
settings and the Windows registry settings.Note:
There is one exception to
app/web/config
settings overridingmachine.config
. Fororacle.manageddataaccess.client
andoracle.unmanageddataaccess.client
sections, amachine.config
with a specific ODP.NET version subsection, that is,<version number="4.121.2.0">
, will override anapp/web.config
subsection that references all versions generically, that is,<version number="*">
. To override themachine.config
subsection, create a subsection for that version in theapp/web/config
file, that is,<version number="4.121.2.0">
. -
Any attribute settings that are equivalent to the connection string override everything.
The application or web config file can be useful and sometimes essential in scenarios where more than one application on a computer use the same version of ODP.NET, but each application needs a different ODP.NET configuration. The Windows registry value settings for a given version of ODP.NET affect all the applications that use that version of ODP.NET. However, having ODP.NET configuration values in the application or web config file assure that these settings are applied only for that application, thus providing more granularities.
For example, if the application or web.config
file has a StatementCacheSize
configuration setting of 100
, this application-specific setting forces the version of ODP.NET that is loaded by that application to use 100
for the StatementCacheSize
and overrides any setting in the machine.config
and in the registry. Note that for any setting that does not exist in a config file (machine.config
or application/web config), the value in the registry for a loaded version of ODP.NET is used, as in previous releases.
Note that ODP.NET reads the machine.config
files from the version of the .NET Framework on which ODP.NET runs, not from the version of ODP.NET.
ODP.NET only reads the Windows Registry and the XML configuration file when it is loaded into memory, thus any configuration changes made after that are not read or used until the application is re-started.
All boolean attributes in ODP.NET .NET configuration settings accept true
, false
, 1
, and 0
as valid values. 1
is equivalent to true
and 0
is equivalent to false
.
2.7.1 Oracle Client Configuration File Automated Setup During Installation
When installing Oracle Data Access Components (ODAC) in a new Oracle Home, Oracle Universal Installer (OUI) automatically copies the Oracle local naming (tnsnames.ora), profile (sqlnet.ora), and directory (ldap.ora) parameter files and settings from an existing Oracle home into the newly installed ODAC home, as long as they share the same bitness. That is, they are both 32-bit installations or they are both 64-bit installations.
Alternatively, existing *.ora
files can be copied over from another existing Oracle home, besides the last active one, to the new ODAC Oracle home. OUI provides location information for these files from up to three other existing Oracle homes if they exist. The *.ora
files can be customized if the new Oracle home uses a different configuration from the previous Oracle home from which the files were copied over.
If you install into an existing ODAC or RDBMS Oracle home, then no new *.ora
files is copied or created.
If you install onto a computer without any previous Oracle homes present, then OUI prompts the user for the database connection alias information. OUI then automatically creates the tnsnames.ora
file. If no alias information is provided, then no tnsnames.ora
file is created. Even if the user does not have all the database connection information readily available, Oracle recommends inserting placeholder values during the install process, then modifying the tnsnames.ora
file later with actual values to replace the placeholders.
2.7.2 Oracle Client Configuration File Settings
ODP.NET tnsnames.ora
, sqlnet.ora
, and ldap.ora
parameter values can be set in a .NET configuration file or within the *.ora
file itself. The *.ora
file location can be a location different from the standard ORACLE_HOME
/network/admin
directory. The *.ora
settings order of precedence is similar to ODP.NET's settings order of precedence. The main difference is that the *.ora
files themselves are included in the search order. The tnsnames.ora
and sqlnet.ora
precedence order is as follows:
-
app.config
orweb.config
-
machine.config
-
File location specified by
TNS_ADMIN
setting -
The current
.EXE
or web application root directory -
%ORACLE_HOME
%\network\admin
if using ODP.NET, Unmanaged Driver
The ldap.ora
precedence order is as follows:
-
app.config
orweb.config
-
machine.config
-
File location specified by
TNS_ADMIN
setting in .NET config file -
File location specified by
LDAP_ADMIN
setting in .NET config file -
The current
.EXE
or web application root directory -
%ORACLE_HOME
%\network\admin
if using ODP.NET, Unmanaged Driver -
%ORACLE_HOME
%\ldap\admin
if using ODP.NET, Unmanaged Driver
Oracle recommends using an app.config
or web.config
file to store all these Oracle Client configuration parameter settings.
Once the first tnsnames.ora
, sqlnet.ora
, and ldap.ora
are found and read, no additional *.ora
file lower in the precedence order is read. That means all Oracle Client configuration settings must be made in the app.config
, web.config
, machine.config
, or the first set of *.ora
files found. Additional parameter values set in *.ora
files lower in the precedence order will not be read.
2.7.3 Machine-Wide Configuration Option
ODAC OUI and xcopy installs ODP.NET with either machine-wide or non-machine-wide configuration for managed and unmanaged ODP.NET. Machine-wide configuration makes global changes to the machine's .NET setup, including placing the provider assembly into the Global Assembly Cache (GAC) and updating the machine.config
with configuration section handler and DbProviderFactory
information.
Machine-wide configuration also creates a TNS_ADMIN
machine.config
setting. If TNS_ADMIN
already exists as a Windows environment variable in an OUI ODAC installation, then the TNS_ADMIN
machine.config
setting is set to that directory location. If TNS_ADMIN
does not already exist for an OUI ODAC installation, then the machine.config
TNS_ADMIN
value is set to ORACLE_HOME
\network\admin
. Xcopy installations always create a machine.config
TNS_ADMIN
value set to ORACLE_HOME\network\admin
.
For ODAC OUI machine-wide configuration installations only, the LDAP_ADMIN
setting may also be created in machine.config
if an ldap.ora
file can be found through the existing LDAP_ADMIN
or TNS_ADMIN
Windows environment variables. ODAC OUI installations may also create a NAMES.DIRECTORY_PATH
setting in machine.config
for machine-wide configuration.
If non-machine-wide configuration is selected, then none of these changes are made. Starting with release 12.2, ODAC installs default to non-machine-wide configuration for a new Oracle home installation. For existing Oracle homes, ODAC re-installs the default to the same configuration setting chosen for that Oracle home from the previous installation.
If you plan to install ODAC and the ODP.NET NuGet install on the same machine, then ODP.NET should be configured for non-machine-wide, especially if both share the same ODP.NET version number that .NET Framework uses to distinguish assembly versions, for example, 4.121.2.0.
Users can reconfigure ODP.NET from machine-wide configuration to non-machine-wide configuration by re-installing ODP.NET to the same Oracle home where ODP.NET of the same version is already installed. For example, if you have already configured ODP.NET machine-wide, then you can re-configure it by re-installing ODP.NET onto the same Oracle home and selecting the non-machine-wide configuration option.
For applications that depend on an ODP.NET version that was not configured machine-wide, it is important to note the following:
-
ODP.NET assembly or assemblies that the application depends on will need to be copied over to the application directory.
-
Proper .NET configuration settings will be required to use Provider Factory, or Provider-specific configuration, or both.