本文将提供一个关于新 12C 的 Oracle Data Provider for .NET, Managed 驱动程序简要概述。有关 Oracle Data Provider for .NET, Managed 驱动程序的更多信息,包括新的 Oracle 数据访问组件(ODAC)版本可从以下链接获得:
Oracle Data Provider for .NET, Managed 驱动程序的架构或许与你今天使用的 Oracle .NET 应用不同。Oracle Data Provider for .NET, Unmanaged 驱动程序是 Oracle 可以追溯到 8.1.7 版本,至今一直提供的,并与甲骨文完整安装或即时客户端的二进制文件存在着依赖关系。
Managed 架构
该架构上面是无 Oracle 客户端的依赖关系,完全由独立的 .NET 程序集进行管理。Oracle 客户端和 SQL* Net 层已经被移植到 .NET 程序集内部的 Oracle.Managed.DataAccess.dll。这非常类似于我们目前提供的针对 java 开发的 Oracle JDBC 瘦驱动程序体系结构。所有的 oracle 客户端和 SQL*Net 层驻留在 Oracle.ManagedDataAccess.dll,这使得开发和部署变得简单许多。所有您需要做的是复制程序集 Oracle.ManagedDataAccess.dll 的副本到你的应用中,之后便大功告成了。移动到 Managed 架构的另一个优点是,现在你只需要一个组件便包括32位和64位开发。在管理即将部署到终端客户的 .NET 程序集的架构上没有任何管理区别。这是因为管理代码已经编译到 Microsoft intermediate language(MSIL))。
功能标准的 ADO.NET 提供者对象,属性和方法都由初始发行版本中 Visual Studio 中拖放代码生成而提供,并支持完整的 SQL 以及 PL/SQL。本文在此列表中的功能并没有包含所有功能,但这里有一些流行的功能包含在这个 12C 版本:
- 连接池的功能(属性:最小,最大,生命周期等)
- 高可用性功能(FAN和自动负载平衡)
- 性能计数器收集连接池实时统计信息
- 原生Oracle数据类型(REF游标,LOB,SecureFiles,时间戳,等)
- 多活动RecordSet
- 自我调优(Statement Cache动态调优)
- 安全和审计(代理,操作系统认证,等)
- 分布式事务
这些都是目前 ODP.NET Unmanaged 驱动程序版本中可用的一些功能,但并没有使之成为第一版的 ODP.NET Managed 驱动程序的功能。本文在此列表中的功能并没有包含所有功能,但这里有一些重要的功能:
- 用户定义的类型
- Oracle 特定的 XML 功能和数据类型
- 高级队列
- 客户端结果缓存
- BulkCopy
注:支持使用 Microsoft 分布式事务处理协调器的分布式事务,然而,该功能需要 ODP.NET Managed 驱动程序安装的第二个组件部署后才能使用。当该组件被操作时,它将使 unmanaged API 调用 DTC。因此,开发者需要部署32位或64位版本 Oracle.ManagedDataAccessDTC.dll,取决于他们使用的 .NET Framework 的位数。该组件提供了 enlistment 和 commit 服务。自动恢复仍然是由 Windows 恢复服务执行,而不是 Oracle.ManagedDataAccessDTC.dll 执行。一个恢复服务可以在所有 ODP.NET Managed 和本机上 ODP.NET Unmanaged 驱动程序以及 Oracle 客户端共享。
配置ODP.NET Managed 驱动程序在很大程度上依赖于配置文件的自定义设置,因为我们不再支持使用注册表。推荐的设置您的应用定制的设置的方法是通过使用 .NET 和 Oracle 配置文件。您可以使用应用程序,网页或服务器 .NET 配置文件进行定制设置,这取决于你想要这些设置的级别。
NET 配置文件样本: <?xml version="1.0"?> <configuration> <oracle.manageddataaccess.client> <version number="*"> <dataSources> <dataSource alias="orclinconfig" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)) (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)))"/> </dataSources> <settings> <setting name="Tracelevel" value="0"/> <setting name="TraceFileLocation" value="c:\odptrace"/> <setting name="TNS_ADMIN" value="c:\oracle\network\admin"/> </settings> </version> </oracle.manageddataaccess.client> </configuration>
注:查看 Oracle Data Provider for .NET 的文档来了解有关支持的配置设置的其他信息。
迁移以下是从 Unmanaged ODP.NET 到完全 ODP.NET Managed 驱动程序迁移的三个基本步骤:
- 更改项目的程序集的引用(从 Oracle.DataAccess.dll 到 Oracle.ManagedDataAccess.dll)
- 更改代码以使用 Oracle.ManagedDataAccess.Client 和各种类型的命名空间(使用 Oracle.ManagedDataAccess.Client)
- 创建,更新和/或修改连接的配置设置以及你的应用程序依赖的其他自定义设置。
从 Unmanaged 到 Managed,API 调用是相同的,没有变化。我们建议您在开始迁移之前,查看自述文件来了解 ODP.NET 类的支持情况的差异,因此您可以决定是否要迁移到的版本支持应用程序所需的功能。 ODP.NET Managed 驱动程序支持的类的列表以及差异可以参阅:
Managed Hello World将以下代码复制到名为 ManagedHelloWorld.cs 的文件中。
using System; using System.Data; using Oracle.ManagedDataAccess.Client;
class TestCon { static void Main(string[] args) { try { // Using Data Source in .NET app config file string c; using (OracleConnection con = new OracleConnection(constr)) { con.Open(); using (OracleCommand cmd = new OracleCommand("", con)) { cmd.CommandText = "select 'HelloWorld' from dual"; string response = cmd.ExecuteScalar().ToString(); Console.WriteLine("Response is {0}",response); } } } catch (Exception ex) { Console.WriteLine("Exception occurred: {0}", ex.Message); Console.WriteLine("InnerException: {0}", ex.InnerException); } } }
复制以下配置部分到一个文件,命名为 ManagedHelloWorld.exe。配置并更改成一个您目标数据库正确的已经配置好的连接描述符。.
<?xml version="1.0"?> <configuration> <oracle.manageddataaccess.client> <version number="*"> <dataSources> <dataSource alias="orclconfig" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)) (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)))"/> </dataSources> </version> </oracle.manageddataaccess.client> </configuration>
使用一个链接到 Managed 程序集来编译控制台应用程序。.
C:\ManagedHelloWorld>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /R:"C:\ManagedHelloWorld\Oracle.ManagedDataAccess.dll" ManagedHelloWorld.cs
Microsoft (R) Visual C# Compiler version 4.0.30319.17929 for Microsoft (R) .NET Framework 4.5 Copyright (C) Microsoft Corporation. All rights reserved.
C:\ManagedHelloWorld>dir Volume in drive C is System Volume Serial Number is 7AE8-74D9
Directory of C:\ManagedHelloWorld
09/11/2013 10:34 AM <DIR> . 09/11/2013 10:34 AM <DIR> .. 09/11/2013 10:33 AM 1,020 ManagedHelloWorld.cs 09/11/2013 10:34 AM 4,608 ManagedHelloWorld.exe 09/11/2013 10:29 AM 389 ManagedHelloWorld.exe.config 08/05/2013 05:28 PM 6,525,440 Oracle.ManagedDataAccess.dll 4 File(s) 6,531,457 bytes 2 Dir(s) 51,413,135,360 bytes free
C:\ManagedHelloWorld>
执行 ManagedHelloWorld 控制台应用程序。
C:\ManagedHelloWorld>ManagedHelloworld Response is HelloWorld
C:\ManagedHelloWorld>
|