普通の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」へのパスは通しています。
何かすべきことが抜けているのでしょうか。
ODP.NET は、
[App] ↓ [Oracle.DataAccess.dll] ↓ [OraOpsXX.dll](11g の場合は「OraOps11w.dll」)
のような、依存関係を持っています。
今回のケースは、OraOpsXX.dll(ODP.NET のパッケージに含まれる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
色々調べていただいて、ありがとうございます。
おっしゃるとおり、「OraOps11w.dll」が必要のようですね。
ファイルがあるか等、調べて、無ければ配置して結果をお伝えします。
追記
配置して、実行に成功しました。
同じエラーで悩んでいる人がもっと多いと思ったんですが、意外と情報が少なかったので、有益でした。ちゃんとマニュアルにも記載がありますね。
ありがとうございました!