1313835668 サーバにあるOracleへクライアントPCのWindowsアプリからODP.NETでの接続で、

普通のOracle Clientでは接続できるのに、Instant Clientからの接続ができません。
「The provider is not compatible with the version of Oracle client」の例外が出ます。
バージョン不一致を訴えていると思われますが、OracleのClientをまったくインストールしない場合にも
同例外が出るので、ODP.NETがクライアントを認識していないと思います。
そもそも、サーバ、クライアント、ODP.NETでバージョンはすべて11.2.0.1.0で統一させています。
なお、Tnsnames.oraは使わず、アプリのコードの中で
Conn.ConnectionString = "User Id=・・・Data Source=((DESCRIPTION = (ADDRESS_LIST = ・・・;"
のように直接記述する方法で、「Oracle Client」では接続に成功しています。
同条件で、「Instant Client」にすると上記例外が出ます。
画像のように「win32_11gR2_client.zip」のOUIにて、インストールタイプを
「InstantClient」のタイプで、「Instant Client」を入れ、
「管理者」タイプで「Oracle Clinet」を試しています。
必ず一旦もう一方を削除してからインストールしています。
「Instant Client」へのパスは通しています。
何かすべきことが抜けているのでしょうか。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2011/08/23 23:41:36
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:cx20 No.1

回答回数607ベストアンサー獲得回数108

ポイント450pt

ODP.NET は、

[App]
 ↓
[Oracle.DataAccess.dll]
 ↓
[OraOpsXX.dll](11g の場合は「OraOps11w.dll」)

のような、依存関係を持っています。


今回のケースは、OraOpsXX.dll(ODP.NET のパッケージに含まれるDLL)が無い為に、エラーとなっているものと考えられます。

  • 「Oracle Clinet」… OraOpsXX.dll がインストールされる。
  • 「Instant Client」… OraOpsXX.dll がインストールされない。

以下に、事象の説明が記載されていましたので参考まで。

■ Mark Williams :: Blog: ODP.NET: The provider is not compatible with the version of Oracle client

http://oradim.blogspot.com/2009/09/odpnet-provider-is-not-compatible-with.html

原因1:OraOpsXX.dll のバージョンの問題

配置先の Oracle Client + ODP.NET のバージョンが開発環境より古い場合。


原因2:OraOpsXX.dll が見つからない。

ファイルそのものが無い場合等。


原因3:トリッキーな問題

OraOpsXX.dll が参照しているCのランタイム(MSVCRxx.dll)が無い場合等。

参考情報

■ Oracle Data Provider for .NETバージョニング体系

http://download.oracle.com/docs/cd/E16338_01/win.112/b62267/InstallVersioningScheme.htm

id:kyoko55

色々調べていただいて、ありがとうございます。

おっしゃるとおり、「OraOps11w.dll」が必要のようですね。

ファイルがあるか等、調べて、無ければ配置して結果をお伝えします。

追記

配置して、実行に成功しました。

同じエラーで悩んでいる人がもっと多いと思ったんですが、意外と情報が少なかったので、有益でした。ちゃんとマニュアルにも記載がありますね。

ありがとうございました!

2011/08/23 23:41:00
  • id:cx20
    Oracle には、あまり詳しくないですが・・・
    そもそも、「Instant Client」に「ODP.NET」が含まれていないということではないでしょうか?
    「Oracle Data Access Component」(ODAC)であれば、「ODP.NET」と「Oracle Instant Client」が内包されているようです。

    <参考情報>
    ■ .NETによるOracle Database開発とは? - @IT
    http://www.atmarkit.co.jp/fdotnet/vblab/oracledbentry_01/oracledbentry_01_03.html
    ■ Oracle Data Access Components (ODAC) for Windows
    http://www.oracle.com/technetwork/database/windows/downloads/index-101290.html

    ・Oracle Data Provider for .NET
    ・Oracle Instant Client
  • id:kyoko55
    確かにInstant ClientにはODP.NETは含まれていないと思います。
    ODP.NETのバージョンというか、「Oracle.DataAccesss.dll」のバージョンが、クライアント・サーバと同じ11.2.0.1.0です。
    書き忘れていましたが、Visual Studio2008上の参照設定で、Oracleサーバに付属していた「Oracle.DataAccesss.dll」を追加し、ローカルコピーを「True」にして実行している・・・そんな同じ条件で「Oracle Client」「Instant Client」の両者を試しています。
  • id:cx20
    解決されたようでよかったです。ポイントありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません