Oracle Data Provider for .NET(ODP.NET)

使ってみようと思いインストールしてみたのだが、その要件の一つを見てがっかりした。

  • SQL*Net TCP/IPリスナーを運用しているOracle R8.0.6 以降 (各プラットフォーム)

Oracleネィティブのプロバイダということなので、てっきりJava Thin Driverのように他のミドルウェアの助けを一切借りることなく、直接Oracle RDBに接続できると期待していたのだがそうではなく、JavaのOCIドライバのようにOracleクライアントがインストールしてある環境じゃないと使えないのか。

"User Id=scott;Password=tiger;Data Source=orcl9i;"
まあ、サンプルの接続文字列を見た時点で普通気が付くけど。

Oracleクライアントを利用するプロバイダであれば別にODP.NETではなくとも、Microsoftが提供する.Net Managed Provider for Oracleでも良いわけで、Oracleは何故にJava同様のIPで接続できるドライバ-プロバイダを用意しなかったのだろう。技術的には可能だっったろうに。
ちなみにODP.NETがMicrosoft謹製のプロバイダに比べて優れていると期待できるのは

    1. トータルの性能
    2. 接続プーリング
    3. ODP.NET独自の(ネイティブ型、PL/SQLサポート、行変更通知、接続自動張替え等)の機能
    4. ODT.NETによるVisual Studio 2005上での開発支援
    5. ODE.NET(Oracle CLR Hosting, .NETストアド等)による拡張

(オラクルで.NETを使うメリットより(OTN-Japanへの登録が必要)
以上だが、私はODT.NETやODE.NETはその機能自体使わないのでODP.NETを使う理由は1〜3に限られる。ただ、内部でOracleクライアントを利用するプロバイダという方式が同じなため、DataSetやDatTableを使うのではなくDataReaderを普通に使う限りではODP.NETのフェッチ性能のアドバンテージは大して無いのではないか。(未測定なので推測。その内実測してみる予定)

Oracleのユニバーサルインストーラだが、久しぶりに使ったが相変わらず独自のUIで使い難い。javaを使っているのは別に良いのだが(昔はJREのバージョンのせいで特定のCPUを持つPCにインストールできない、という大笑いなバグがあったが)PSIAPIの欠落エクスポートでエラーとか出たりと動作が怪しい。(インストール自体は成功している)

追記:
と思ったらakirameiさんの所でこんな事が指摘されていたのを見つけた。
OracleClient vs ODP.NET - 匣の向こう側 - あまりに.NETな
これによるとMicrosoft提供のプロバイダだとトランザクションの分離レベルが無視されるらしい。バグの無さという意味ではベンダー提供のドライバの方が出来が良いというのが定説だ(例外もある)。