ODP.NET Managed Driverについて自分の欲しい形でまとまった資料がなかったのでここでまとめておきます。
ODP.NET Managed Driver(管理対象ドライバ)とは
ODP.NET Managed Driver(管理対象ドライバ)とはOracle 12cから追加された新しい形のODP.NETで、すべてがマネードコードで記述されているフルマネージドなドライバになります。 このため、これまでのODP.NETとは違いネイティブなドライバ(Instant Clientなど)を必要としない軽量なドライバになっています。
ちなみにこれまでのODP.NETはUnmanaged Driver(管理対象外ドライバ)という呼称になっています。
管理対象ドライバや管理対象外ドライバという呼称は誤訳としか思えないのでここではManaged DriverとUnmanaged Driverで統一します。
Managed DriverとUnmanaged Driverの違い
これまでのUnmanaged DriverはOracle.DataAccess.*
名前空間に各種クラスがありましたが、Managed Driverでは名前空間が Oracle.ManagedDataAccess.*
に変わります。
Unmanaged Driver、Managed Driverともに同じクラス、メソッドを持ち互換性を確保する様になっています。
ただし、Managed Driverの一部のクラスについては機能が制限されていたり機能そのものがサポートされていません。これは今後のバージョンで改善されると思います。
現時点でのUnmanaged DriverとManaged Driverの相違点は ODP.NET管理対象ドライバと管理対象外ドライバの相違点 に記載されています。
Managed Driver独自の機能として、app.config
にTNS_ADMINのパスやTNS接続エントリ情報を記載することができ、TNS接続する場合にtnsnames.ora
の設定をせずに済ますことができます。
この機能によりアプリケーションの配布と同時にネットワーク設定も済ますことが出来る様になります。
また、サポートする.NETのバージョンがUnmanaged Driverは.NET 2.0以降であるのに対し、Managed Driverは.NET 4以降のみのサポートとなります。
インストール方法
公式な手順についてはこちらを参照してください。
通常のインストール
Managed Driverは通常、OUIでインストールするかXCopyでインストールするか2通りの方法があります。
OUIでのインストールは画面の指示に従うだけですので問題ないと思います。
Xcopy版のインストールについてはこのエントリでも触れた通り、ダウンロードサイト(32bit、64bit)よりManaged Driverをダウンロードし、ダウンロードしたZipファイルを展開した先の".¥odp.net¥managed¥x64"または".¥odp.net¥managed¥x86"フォルダにあるconfigure.batを実行するればインストール完了になります。 展開したディレクトリがそのままODP.NETのインストール先になります。
このconfigure.bat
では以下のことが行われています。
OraProvCfgによる
machine.config
の書き換えOraProvCfgによる
Oracle.ManagedDataAccess.dll
、Oracle.ManagedDataAccessDTC.dll
のGACへの登録Visual Studio連携のための各種設定
イベントログ用のメッセージ定義の追加
アプリケーションの展開
アプリケーションと共にManaged Driverを展開する場合、展開先の環境に対して前述の通常のインストールの他にアプリケーションに以下のdllを同梱することでManaged Driverを動作させることができます。
Oracle.ManagedDataAccess.dll
Oracle.ManagedDataAccessDTC.dll*1
この場合、インストーラーを使用しないためDLLはGACに登録されず、machine.configの書き換えも行われません。
Nuget
Manage DriverのNugetがここで公開されていますが、公式なものでなくただOracle.ManagedDataAccess.dllをダウンロードしてくるだけのものですので使用はお勧めできません。
Nugetを使うのは開発環境であることがほとんどでしょうから、このNugetを使うよりはVisual Studio連携の設定が行われる通常のインストールを行った方が良いでしょう。
2015/05/09更新
今年の1月にOracle公式のNugetパッケージが公開されていました。
Visual Studioのパッケージマネージャーコンソールから以下のコマンドを入力することでOracle.ManagedDataAccess.dll
のダウンロードとapp.config
およびweb.config
の設定を行ってくれる様になっています。
PM> Install-Package Oracle.ManagedDataAccess
ちなみにパッケージをインストールした時点でOTN開発者ライセンスに同意したものとみなされます。
アプリケーション開発
Managed Driverにおける開発方法はUnmanaged Driverとほぼ同等になります。名前空間をOracle.ManagedDataAccess.*
に変える以外は全く同じと言って差し支えないと思います。
開発手順
公式な手順としてはこのチュートリアルを参考にするのが良いと思います。
基本的に開発するアプリケーションでOracle.ManagedDataAccess.dllを参照させるだけで準備は完了となります。 Oracle.ManagedDataAccessDTC.dllはOracle.ManagedDataAccess.dllが内部的に使用するの参照する必要はありません。
コード例
以下に簡単なコード例を示します。
app.config
以外はほぼUnmanaged Driverの場合の実装と同じなので特に説明することもないと思います。
みんな大好きDapperも使う事ができます。
App.cs
using System; using System.Collections.Generic; using System.Linq; using Dapper; using Oracle.ManagedDataAccess.Client; namespace ODPManagedSample { /// <summary> /// ODP.NET Managed Driver Sample Program /// </summary> class App { /// <summary> /// Main Function /// </summary> static void Main(string[] args) { // // ODP.NET Managed Driverを使うにはOracle.ManagedDataAccess.dllを参照します。 // 分散トランザクションを使用する場合はOracle.ManagedDataAccess.dllと同じディレクトリ // にOracle.ManagedDataAccessDTC.dllを配置します。 // ※Oracle.ManagedDataAccessDTC.dllを参照する必要はありません。 // using( var Connection = new OracleConnection()){ //Data SourceにApp.configの設定を参照することができます。 Connection.ConnectionString = "User ID=SCOTT; Password=TIGER; Data Source=ORCL;"; Connection.Open(); // //接続した後はこれまでのODP.NETと同じ操作を行えます。 //Managed Driverとの機能差については以下のURLを参照。 //http://docs.oracle.com/cd/E57425_01/121/ODPNT/intro004.htm#CEGEJIFD // //ちなみにDapperも使えます。 Connection.Query("SELECT EMPNO, ENAME FROM EMP ORDER BY 1") .ToList() .ForEach(r => Console.WriteLine(String.Format("{0} : {1}", r.EMPNO, r.ENAME))); } Console.ReadLine(); } } }
app.config
<?xml version="1.0" encoding="utf-8"?> <configuration> <!-- インストール時にconfigure.batを実行しなかった場合、以下のconfigSectionの定義が必要になります。 configre.batを実行した場合はmachine.configに以下の定義が追加されていますのでapp.configでの記載は不要になります。 このセクションに記載するOracle.ManagedDataAccess.dllのバージョンとPublicKeyTokenはインストールしたバージョンに合わせてください。 --> <configSections> <section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> </configSections> <oracle.manageddataaccess.client> <!-- 設定を反映させるバージョンを指定することができます。すべてのバージョンを対象とする場合は*を指定します。 --> <version number="*" > <dataSources> <!-- TNSの接続エントリ内容を記載します。複数記載可能です。 --> <dataSource alias="ORCL" descriptor="(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )" /> </dataSources> <settings> <!-- TNS_ADMINのパスを指定することもできます --> <!-- <setting name="TNS_ADMIN" value="C:¥oracle¥product¥12.1.0¥client_1¥network¥admin¥" /> --> </settings> </version> </oracle.manageddataaccess.client> </configuration>
app.configの設定について
app.config
の設定について、上記のコード例にも書いていますが、インストール時にconfigure.bat
を実行しなかった場合はconfigSection
の記述が必須となります。
この記述はcongifure.bat
を実行した場合はmachine.config
に追加されるもので、oracle.manageddataaccess.client
セクションをパースするために必要な部分になります。
この記載がないとプログラムの起動時に例外が発生します。
Managed Driverに関する設定はこのoracle.manageddataaccess.client
セクション配下に記載します。
versionセクション
version
セクションはoracle.manageddataaccess.client
セクション直下に記述し、設定を反映させるバージョンを指定することができます。
すべてのバージョンを対象とする場合は*とします。
このversionセクションの下にdataSouces
、settings
セクションを記述します。
dataSoucesセクション
dataSouces
セクションにはTNSのエントリと対になるdataSource
セクションを記述します。
dataSource
セクションは複数記載でき、コード例の様にTNSエントリのAlias名とDescriptorの内容をそのまま記載します。
ただし、Descriptorの内容についてすべてのキーワードがサポートされてはおらず、一般的に使用される一部のキーワードのみサポートとなっています。
settingsセクション
settingsセクションにはその他の設定を記載します。
現時点で設定可能な項目は、
DbNotificationPort
DemandOraclePermission
FetchSize
LDAP_ADMIN
MaxStatementCacheSize
MetaDataXml
NAMES.DIRECTORY_PATH
NAMES.LDAP_AUTHENTICATE_BIND
NAMES.LDAP_CONN_TIMEOUT
NODELAY
ORACLE_SID
PerformanceCounters
SelfTuning
SQLNET.AUTHENTICATION_SERVICES
StatementCacheSize
SSL_VERSION
TNS_ADMIN
TraceFileLocation
TraceLevel
TraceOption
TCP.CONNECT_TIMEOUT
WALLET_LOCATION
になります。
各セクションに設定可能な項目の詳細は、Oracle Data Provider for .NETの構成 を参照してください。
各種リンク
*Introduction to Building ODP.NET, Managed Driver Applications
絵で見てわかるOracleの仕組み (DB Magazine SELECTION)
- 作者: 小田圭二
- 出版社/メーカー: 翔泳社
- 発売日: 2006/06/21
- メディア: 単行本
- 購入: 27人 クリック: 385回
- この商品を含むブログ (48件) を見る
*1:アプリケーションで分散トランザクションを使用する場合のみ必要になります