===================================================
ORACLE DATA PROVIDER FOR .NET 11.2.0.1.0 Production
===================================================
 Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. 

This document provides information that supplements the Oracle Data Provider 
for .NET (ODP.NET) Production documentation.


===============
IMPORTANT NOTES
===============

ODP.NET supports .NET Framework 2.0 and higher.  However, ODP.NET 11.2.0.1.0 
is not a LINQ enabled data provider.


============================
INSTALLATION AND SETUP NOTES
============================

1. Product Dependencies

ODP.NET requires Oracle Client 11.2.0.1.0 or Oracle Instant Client 11.2.0.1.0. 
When installing a new ODP.NET 11.2.0.1.0 instance, Oracle Universal Installer 
(OUI) will automatically install Oracle Instant Client 11.2.0.1.0.


2. Policy DLLs

Note that the installation of ODP.NET will place ODP.NET policy DLLS 
into the GAC so that existing applications can start using the newly 
installed ODP.NET version immediately.  However, if this is not desired, be 
sure to remove the policy DLLs from the GAC.


==================================
EDITION-BASED REDIFINITION SUPPORT
==================================

Edition-based redefinition enables you to upgrade the database component of 
an application while it is in use, thereby minimizing or eliminating down time.

NOTE: For more detailed information on Editions, please read Oracle Database 
Administrator's Guide and Oracle Database Advanced Application Developer's 
Guide at http://www.oracle.com/pls/db112/homepage

ODP.NET 11.2.0.1.0 supports specifying an Edition at deployment time through the
registry or through a configuration file, when using it against Oracle 
Database 11.2 or later.
 
Applications can specify the Edition at deployment time for a given version of 
ODP.NET by creating the following registry entry (of type REG_SZ)
HKLM\Software\Oracle\ODP.NET\<version>\Edition
and setting it to any valid Edition string value.
 
Applications can also specify the Edition at deployment time by adding the 
following entry in a .NET application's app.config or web.config file. 
The machine.config can also be modified to specify Edition for all 
applications that use a particular version of the .NET framework.
 
Following fragment shows how the Edition can be specified to an edition name 
of "E1" in a configuration file for .NET 2.0, 3.0, and 3.5:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <oracle.dataaccess.client>
  <settings>
   <add name="Edition" value="E1"/>
  </settings>
 </oracle.dataaccess.client>
</configuration>

NOTE:  ODP.NET only supports deployment-time configuration of Edition.  
ODP.NET does not support usage of "ALTER SESSION" to modify the edition 
during the lifetime of a process.


==============================
ORACLEPERMISSION RELATED NOTES
==============================

1. Configuring OraclePermission for Web Applications in high or medium trust

For Web Applications operating under high or medium trust, OraclePermission 
needs to be configured in the appropriate "web_<trust level>.config"  file so 
that the application does not encounter any security errors.  This 
configuration can be done through the OracProvCfg tool. OraProvCfg.exe will
make the appropriate entries in both web_hightrust.config as well as 
web_mediumtrust.config associated with the specified .NET framework version. 

Given below is an example on the usage of OraProvCfg tool for configuring 
OraclePermission in a .NET 2.0 web application:

    OraProvCfg.exe /action:config  /product:odp /component:oraclepermission 
                   /frameworkversion:v2.0.50727
                   /providerpath:<Oracle.DataAccess.dll full path>

On running the above command, The following entry will be made in  
"web_hightrust.config" and  "web_mediumtrust.config" under ASP.NET permissionset

<IPermission class="Oracle.DataAccess.Client.OraclePermission, Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" version="1" Unrestricted="true" />

OraProvCfg can also be used to remove these entries from these config files 
when they need to be removed.

    OraProvCfg.exe /action:unconfig  /product:odp  /component:oraclepermission
                   /frameworkversion:v2.0.50727
                   /providerpath:<Oracle.DataAccess.dll full path>


2. Configuring OraclePermission For Windows Applications in partial trust

For Windows applications operating in a partial trust environment, the 
OraclePermission entry should be specified under the appropriate permission 
set in security.config file. (Security.config is available in 
%windir%\Microsoft.NET\Framework\{version}\CONFIG). The example below 
specifies the OraclePermission entry that would be required for a .NET 2.0 
Windows application

<IPermission class="Oracle.DataAccess.Client.OraclePermission, Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" version="1" Unrestricted="true" />


==================================
TIPS, LIMITATIONS AND KNOWN ISSUES
==================================

1.  Data truncation errors can be encountered when fetching LONG data from a 
    UTF8 database.

2.  When using distributed transactions in conjunction with proxy connections,
    the client user password must be supplied due to an OraMTS limitation.

3.  Distributed Transactions and Isolation Levels
    ODP.NET supports only the read committed isolation level for distributed
    transactions.

4.  PL/SQL LONG, LONG RAW, RAW, VARCHAR data types cannot be bound with more 
    than 32512 bytes.

5.  Having a command execution terminated through either the invocation of 
    OracleCommand's Cancel method or expiration of OracleCommand's 
    CommandTimeout property value may return ORA-00936 or ORA-00604, rather 
    than the expected ORA-01013.

6.  An exception is not thrown when change notification is registered on a 
    bad port number.

7.  If the HKEY_LOCAL_MACHINE\Software\Oracle\NLS_LANG registry entry is 
    set to "NA", ORA-12705 errors will be encountered when using ODP.NET.  
    To eliminate this problem, remove the 
    HKEY_LOCAL_MACHINE\Software\Oracle\NLS_LANG registry entry.

8.  TimeStamp with Local Time Zone Attributes of a UDT
    Binding a custom object with an attribute of type TimeStamp with Local Time 
    Zone as a parameter is not supported in the production release.  The same 
    limitation applies for TimeStamp with Local Time Zone Elements of 
    a Collection.

9.  XMLType Attributes/Elements of a UDT
    ODP.NET does not support UDTs with XMLType as an attribute or an element.

10. If SenderId is specified in OracleAQMessage object while enqueuing, the 
    sender id of dequeued message will have "@ODP.NE" appended in the end. 
    [Bug 7315542]

11. EnqueueTime property value in OracleAQMessageAvailableEventArgs, which is 
    passed through a notification, may have an incorrect value if the message 
    was enqueued with the Delay property value set to a non-default value 
    on the OracleAQMessage object. [Bug 7361345]

12. An "ORA-00942: table or view does not exist" error may be thrown from Dequeue 
    or DequeueArray method invocations when OracleAQDequeueOptions.DeliveryMode 
    is specified as OracleAQMessageDeliveryMode.Buffered and 
    OracleAQDequeueOptions.Correlation is specified and there are no messages 
    available in the queue. [Bug 7343633]

13. Application may not receive group notifications if GroupingInterval property 
    on the OracleNotificationRequest object is set to 0. [Bug 7373765]

14. Against 9.2 database, a message remains in WAITING state if the Delay 
    property of OracleAQMessage was set to a non-zero value while enqueuing 
    the message. [Bug 8828674, 8873837]

15. For performance reasons, it is preferable to specify custom type mapping 
    in a configuration file instead of relying on ODP.NET self discovery mechanism. 
    For more information, please consult "Using XML in Configuration Files to 
    Specify Custom Type Mappings" in the Oracle Data Provider for .NET Developer's 
    Guide.

