# Oracle Data Access Components (ODAC) 21.20 Xcopy

Installation Guide

#### November 2025

This document provides information regarding the contents on the zip file and the steps required to setup ODAC xcopy installation and associated components.

- General Information
- Installation Instructions
- Power BI and Microsoft Tools Setup
- File System Security Recommendations for ODAC Installations
- Uninstallation Instructions
- Notes

## General Information

1. The files of this zip file are NOT to be installed on top of an existing Oracle Universal Installer (OUI) based Oracle Home installation.
2. After unzipping the files, products must be installed and configured by executing the install.bat.

## Installation Instructions

1. Download the ODAC (xcopy version) zip file to a directory for staging.
2. Unzip the file to expand the contents. The following components will be available in the created directories:
   a) ODPM - Oracle Data Provider for .NET, Managed Driver for .NET Framework 4
   b) ODP.NET4 - Oracle Data Provider for .NET, Unmanaged Driver for .NET Framework 4
   c) INSTANTCLIENT - Oracle Instant Client
   d) ORAMTS - Oracle Services for MTS
   e) ASP.NET4 - Oracle Providers for ASP.NET 4
   f) OLEDB - Oracle Provider for OLEDB
   g) OLEDBOLAP - Oracle Provider for OLEDB for OLAP
   The install.bat will also be extracted to the same location as the ODAC zip file, which is used to install and configure.
3. If installing into an existing xcopy home, uninstall the existing xcopy version by following the instructions in the "Uninstallation Instructions" section of this document.
4. Execute install.bat batch file to install and configure ODAC from a Windows command line.
   Note: Depending on the install settings, administrative level privileges may be required. Oracle recommends running the batch file under the "Run as Administrator" context.
   The installation batch file uses the following parameters:

   install.bat <COMPONENT_NAME> <ORACLE_HOME_PATH> <ORACLE_HOME_NAME> [<INSTALL_DEPENDENTS>] [<MACHINE_WIDE_CONFIGURATION>] [<TNS_ADMIN_LOCATION>]

   - COMPONENT_NAME: (Required) ODAC component to install and configure. Values: ODPM (Managed ODP.NET), ODP.NET4 (Unmanaged ODP.NET), ORAMTS (Oracle Services for MTS), etc., or ALL (all components).
   - ORACLE_HOME_PATH: (Required) Directory to install ODAC into. Be mindful if installing to a protected Windows directory, such as C:\Users\<USER NAME>. These directories may have permission restrictions for who can run and which apps can be run.
   - ORACLE_HOME_NAME: (Required) Unique Oracle Home name.
   - INSTALL_DEPENDENTS: (Optional) When set to true, the script installs any dependencies the components require. Default value is true.
   - MACHINE_WIDE_CONFIGURATION: (Optional) When set to true, the script will configure ODP.NET for machine-wide default use. It 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. This parameter only works for ODPM (Managed Driver for .NET Framework 4) and ODP.NET4 (Unmanaged Driver for .NET Framework 4). Default is false.
   - TNS_ADMIN_LOCATION: (Optional) Directory that ODAC finds tnsnames.ora and/or sqlnet.ora configuration files. This setting is made in the Windows Registry.
   ORACLE_HOME_PATH and TNS_ADMIN_LOCATION directory location values that contain spaces should be enclosed in quotes (e.g. "C:\odac home\network\admin")
   Note: Preceding optional parameters in the argument list become required parameters if succeeded by optional parameters that have values set. For example, if you set the TNS_ADMIN_LOCATION parameter, you must then provide values, even when using default values, to INSTALL_DEPENDENTS and MACHINE_WIDE_CONFIGURATION parameters. You may use the following format for additional help documentation:

   install.bat -h

   To install all unmanaged ODP.NET for .NET Framework 4.0 products, here's a sample install command you can execute:

   install.bat odp.net4 c:\oracle myhome true true c:\credentials

   In this example, the 64-bit ODAC Windows Registry entries would be created under HKLM\Software\Oracle\KEY_myhome. Note that ODP.NET registry entries are simply created under HKLM\Software\Oracle\ODP.NET\ not under HKLM\Software\Oracle\KEY_<Oracle Home Name>. If multiple products are installed to the same destination directory, make sure that the Oracle Home Name that is specified as an argument to install.bat is the same for all those products. For 32-bit ODAC on 64-bit Windows, the Windows Registry entries are created under HKLM\Software\WOW6432Node\Oracle.
   By default, when install.bat is executed for a given product, the product and its dependencies will be installed and configured WITHOUT a check to see if there is a newer version of the product or its dependencies already installed. Below is the product dependency information:
   a) Unmanaged ODP.NET depends on
   - Oracle Instant Client
   b) Oracle Services for MTS depends on
   - Oracle Instant Client
   c) Oracle Providers for ASP.NET 4 depends on
   - Oracle Data Provider for .NET 4 (managed driver)
   d) Oracle Provider for OLEDB depends on
   - Oracle Instant Client
   e) Oracle Provider for OLEDB for OLAP depends on
   - Oracle Instant Client
5. All Oracle Client software besides ODP.NET requires the Oracle Home directory and its bin subdirectory to be included in the Windows Path. Add these to the path if you are using any ODAC components that rely on Oracle Client. Unmanaged ODP.NET does not require the Oracle Home directory and its bin subdirectory to be included in the Windows Path unless the application or its dependencies use the SetDllDirectory() API.
6. Note that configure.bat sets the value of the NLS_LANG registry key at HKLM\Software\Oracle\KEY_<Oracle Home Name> to AMERICAN_AMERICA.WE8MSWIN1252 by default. Please modify configure.bat or change this value in the registry after the install if necessary.
7. If OraMTS is installed, the Oracle<OracleHomeName>MTSRecoveryService is created with the LocalService account as the logon account. The credentials can be changed using the "services" administration tool. The default port used is 2030. Please read the OraMTS documentation for details. Note that after the install or the configuration, the service will not be started, since it requires the install directory and its bin directory to be included in the system PATH.
8. Applications using components from ODAC can use EZ CONNECT to connect to Oracle without depending on tnsnames.ora. Otherwise, configure or copy over tnsnames.ora from another machine and set TNS_ADMIN or ORACLE_HOME environment variable appropriately.

## Power BI and Microsoft Tools Setup

Oracle recommends using Oracle Client for Microsoft Tools (OCMT) to setup connectivity between Microsoft data tools, such as Power BI, and Oracle Autonomous Database or Oracle Database, instead of the xcopy install. OCMT works with Power BI service, Power BI Desktop, and other Microsoft data tools that use ODP.NET. Complete instructions are in the Using OCMT book or OCMT website.

## File System Security Recommendations for ODAC Installations

Oracle strongly recommends that the Oracle software installation directory, Oracle network configuration files directory, and any of their parent directories other than the root directory (for example, C:\) should not be modifiable by the Windows Authenticated Users group.

Steps to secure your directory structure:

1. Open a command prompt as a Windows Administrator.
2. Disable the top directory inheritance in the <ORACLE_HOME_PATH> argument specified with install.bat. For example, if you specified <ORACLE_HOME_PATH> as C:\ODAChome\instantclient, run the command:

   icacls C:\ODAChome /inheritancelevel:d

3. Remove the Authenticated Users permissions from this same directory. This command will also remove Authenticated Users permissions for any existing and future-created child directories and files.

   icacls C:\ODAChome /remove:g *s-1-5-11

4. Disable the top directory inheritance in the <TNS_ADMIN_LOCATION> argument you specified to install.bat. For example, if you specified <TNS_ADMIN_LOCATION> as C:\tnsadmin\myconfig, run the command

   icacls C:\tnsadmin /inheritancelevel:d

5. Remove the Authenticated Users permissions from this same directory:

   icacls C:\tnsadmin /remove:g *s-1-5-11

To check the directory permissions, perform one of the following steps for each directory in the path:

- Run the icacls utility. For example:

  icacls C:\ODAChome

- In File Explorer, right-click the directory and select the Security tab.

## Uninstallation Instructions

1. Execute uninstall.bat from the Oracle Home installation directory to unconfigure and uninstall ODAC products.
   Note: Depending on the install settings, administrative level privileges may be required. Oracle recommends running the batch file under the "Run as Administrator" context.
   The uninstallation batch file uses the following parameters:

   uninstall.bat <COMPONENT_NAME> <ORACLE_HOME_NAME> [<MACHINE_WIDE_UNCONFIGURATION>]

   or

   uninstall.bat <COMPONENT_NAME> <ORACLE_HOME_PATH> [<MACHINE_WIDE_UNCONFIGURATION>]

   For example:

   uninstall.bat all myhome

   or

   uninstall.bat all c:\oracle

   Each component can be unconfigured and uninstalled individually. As an example, executing the following uninstalls only unmanaged ODP.NET:

   uninstall.bat odp.net4 myhome

   or

   uninstall.bat odp.net4 c:\oracle

   where "myhome" is the Oracle Home Name that was used at install time and "c:\oracle" is the installation directory. The above example will only uninstall unmanaged ODP.NET, but not its dependencies.
   MACHINE_WIDE_UNCONFIGURATION is optional and has a default value of false. If you installed ODP.NET with machine-wide configuration enabled, deinstall with MACHINE_WIDE_UNCONFIGURATION set to true.
2. Remove the install directory and that directory's bin subdirectory from the system PATH environment variable.

## Notes

1. The install and uninstall scripts log all operations to the destination directory's install.log and uninstall.log.

2. Oracle Services for MTS Known Issue: Oracle Services for MTS account/password name invalid when configuring ODAC xcopy on Windows configured for a Western European (non-English) language.

   Problem Statement: When executing install.bat, the following error occurs:

   Configuring Oracle Services for MTS
   ***********************************
   [SC] CreateService, failure (s) 1057:
   "The account name is invalid or does not exist, or the password is invalid for the account name..."

   Workaround: Execute the command below, substituting <OracleHomeName> and <OracleHomePath> with your deployment's specific values. Replace "NT AUTHORITY\LOCAL SERVICE" with the localized name in the West European language the Windows system uses.

   sc.exe create Oracle<OracleHomeName>MTSRecoveryService binpath= "<OracleHomePath>\bin\omtsreco.exe Oracle<OracleHomeName>MTSRecoveryService" start= auto obj= "NT AUTHORITY\LOCAL SERVICE" DisplayName= Oracle<OracleHomeName>MTSRecoveryService

   For example, if your <OracleHomeName> is "Ora" and <OracleHomePath> is "c:\Ora", execute below:
   sc.exe create OracleOraMTSRecoveryService binpath= "c:\Ora\bin\omtsreco.exe OracleOraMTSRecoveryService" start= auto obj= "NT AUTHORITY\LOCAL SERVICE" DisplayName= OracleOraMTSRecoveryService

   Sample successful execution.
   D:\odac\xcopy>sc.exe create OracleOraMTSRecoveryService binpath= "c:\Ora\bin\omtsreco.exe OracleOraMTSRecoveryService" start= auto obj= "NT AUTHORITY\LOCAL SERVICE" DisplayName= OracleOraMTSRecoveryService
   [SC] CreateService SUCCESS

3. Bug 33605836
   Database token authentication fails with the following error:
   ORA-01017: Invalid username/password; Login denied
   Workaround
   Perform the following steps:
   - Specify the parameters TOKEN_AUTH, TOKEN_LOCATION, SSL_SERVER_DN_MATCH, PASSWORD_AUTH, OCI_IAM_URL, OCI_TENANCY, OCI_COMPARTMENT, OCI_DATABASE in a sqlnet.ora file instead of in a tnsnames.ora file. - Set the TZ environment variable to the Greenwich Mean Time (GMT) as follows:
   set TZ=GMT
   - Specify the TOKEN_LOCATION for the IAM Proof Of Possession (POP) token in sqlnet.ora. Do not rely on the default token location.

4. Additional ODAC component known issues are documented on the ODAC product documentation.

#### Copyright (c) Oracle Corporation 2025