アーカイブ

Archive for 2013年11月

Oracle Data Provider for .NET 12.1のODP.NET管理対象ドライバ

2013年11月13日 1件のコメント

手違いで記事が消えてしまったので、11/13日の記事を再投稿します。

Oracleのトレース関係を調べていて今更ながら気づいたんですが、ODP.NETの最新版が7月にリリースされていたんですね。

Oracle® Data Provider for .NET開発者ガイド 12cリリース1 (12.1)
Oracle Data Provider for .NETの変更点
http://docs.oracle.com/cd/E49329_01/win.121/b72971/release_changes.htm#BABGBIEB

この中で気になったのが、ODP.NET管理対象ドライバというもの。ドキュメントを読む限りでは、ODP.NET 12.0.1以降ではODP.NETの本体であるOracle.DataAccess.Client.dllを置き換えるアセンブリ(と名前空間)として、Oracle.ManagedDataAccess.dllが利用できるようになり、マネージドなDLLだけでOracleに接続できるようになったらしい。しかもTNSなんかの設定もapp.configやweb.configで行えるらしい。

設定ファイルの修正

DbProviderFactories経由で利用している場合、設定ファイルの変更だけで対応ができます。例えばこんなコードで利用しているなら、web.configやapp.configに定義したconnectionStringのproviderNameをOracle.DataAccess.ClientからOracle.ManagedDataAccess.Clientに変更するだけです。

Dim connectionStringName = ConfigurationManager.AppSettings("DefaultConnectionStringName")
Dim connectionString = ConfigurationManager.ConnectionStrings(connectionStringName)
Dim factory = DbProviderFactories.GetFactory(connectionString.ProviderName)

Using connection = factory.CreateConnection()
connection.ConnectionString = connectionString.ConnectionString
connection.Open()
Using selectCommand = connection.CreateCommand()
selectCommand.CommandText = "select sysdate from dual"
Console.WriteLine(selectCommand.ExecuteReader().ToString())
End Using
connection.Close()
End Using

web.config/app.config

<connectionStrings>
<add name="OracleConString"
providerName="Oracle.ManagedDataAccess.Client"
connectionString="DATA SOURCE=XXX;USER ID=XXX;Password=XXX" />
connectionStrings>
OracleClientがインストールされていない環境で動かしてみる。

ODP.NET管理対象ドライバの基本的な機能は分散トランザクション関連の機能を除き、64bitと32bitで差が無いようです。ODP.NET_Managed121010.zipをダウンロードしてZIPファイルをインストールフォルダー(C:\odp.netあたり)に解凍します。インストールに関する詳しい記述はOracle Data Provider for .NET管理対象ドライバのインストールを参考にしてください。CPUアーキテクチャー毎に用意されたconfigure.batを実行します。64bit OSにインストールする場合は"C:\odp.net\managed\x64\configure.bat"ですね。

無題

動きました。

ODACがインストールされていない環境で動かしてみる。

あれ?マネージドだけで動くってことは、設定ファイルと必要なDLLをローカルコピーでおいてやれば、ODACなくても動くんじゃね?ってことで、app.configにDbProviderFactoriesのエントリーを登録して見ます。

<DbProviderFactories>
<clear/>
<add name="ODP.NET, Managed Driver"
invariant="Oracle.ManagedDataAccess.Client"
description="Oracle Data Provider for .NET, Managed Driver"
type="Oracle.ManagedDataAccess.Client.OracleClientFactory,
Oracle.ManagedDataAccess, Version=4.121.1.0,
Culture=neutral, PublicKeyToken=89b483f429c47342"/>
</DbProviderFactories>

DLLが無いとおこられたので、CPUに応じたOracle.ManagedDataAccess.dllを同じフォルダーに入れてあげます。

無題2

動きました。

image

関連ドキュメント

OracleClientをインストールしなくても動くのはいいですね。ただ、Oracle.DataAccess.Clientとは差異がアルようなのでODP.NET管理対象ドライバを利用する場合は、このあたりのドキュメントに目を通しておいたほうがいいでしょう。