6

Oracle 11g Client(Windows用)が9.2までのデータベースで正常に動作するという投稿をいくつか見ました。しかし、クライアントが11gおよび10gのデータベースに接続する場合でも、それは機能していますか?私の質問は:10gと11gのデータベースに接続するときに異なる構成にするものはありますか?

GACのポリシーについて教えてくれた人もいます。

ありがとう !

4

2 に答える 2

8

通常、新しいクライアントドライバを使用して古いOracleデータベースに接続する場合、たとえば12gクライアントを使用して10gまたは11gデータベースに接続する場合は問題ありません。残りの答えは、プログラムを実行しているコンピュータにOracleクライアントが(おそらく)すでにインストールされている場合に、.Netプログラムで発生する可能性のある技術的な問題に属します。


2014年の更新:

その間、OracleはOracleデータベース用のマネージド.Netドライバーをリリースしました。したがって、ローカルのOracleクライアントをインストールしたり、アプリと一緒にInstant Clientを配信したりする代わりに、ローカル構成に依存せずに管理対象ドライバーのみを配信することをお勧めします。そうすれば、インストールされているクライアント、GAC、Oracleデータベースのバージョンなどに問題はありません。管理対象ドライバは、OracleのWebサイトからダウンロードできます。


以前の回答、マネージドドライバーを使用できない場合でも必要です:

クライアントワークステーションにOracleクライアントがインストールされているかどうかわからない場合に問題が発生します。私が想定しているGACについて話している場合、Oracleクライアントがインストールされているかどうか、インストールされている場合はどのバージョンであるかがわかりません

インストールされているOracleClientに依存したくない場合は、.NetアプリケーションでOracleInstantClientを提供できます。たとえば、ODAC 11.2リリース4(11.2.0.3.0)をOracle Developer Tools for Visual Studioとともにダウンロードできます。これにより、開発者ワークステーション用のOracle Clientインストール(DataSet開発およびEntityFrameworkのVisual Studioサポート付き)およびすべてが提供されます。インスタントクライアントに必要なファイル。

インスタントクライアントの場合、次のファイルが必要です(ODACインストールのサブフォルダーでファイルを検索してください)。

  • oci.dll
  • ociw32.dll
  • Oracle.DataAccess.dll
  • orannzsbb11.dll
  • oraociicus11.dll(英語を使用している場合、それ以外の場合は対応する.dll)
  • OraOpd11w.dll
  • tnsnames.ora(必要な場合)

さらに、Windowsディレクトリから次の.dllファイルが必要です。

  • mfc71.dll
  • msvcr71.dll

アプリケーションの作業ディレクトリ(.exeファイルがある場所)にあるすべてのファイルをコピーするだけです。

さて、それはどのようにGACに属しますか?

Oracleクライアントがクライアントマシンにインストールされている場合、GACにはOracle.DataAccess.dllもあります。また、次のようなポリシーがインストールされている可能性もあります。プログラムが参照しているOracle.DataAccess.dllとは関係なく、GACのOracle.DataAccess.dllバージョンが常に使用されます。上でリンクしたODACをインストールすると、そのファイルは下にあります。

C:\ Windows \ Microsoft.NET \ assembly \ GAC_32 \ Policy.4.112.Oracle.DataAccess \ v4.0_4.112.3.0__89b483f429c47342

その結果、クライアントマシンに別のバージョンのOracle.DataAccess.dllがある場合、Oracle.DataAccess.dllをロードしようとすると(「プロバイダーは互換性がありません...」などのエラーメッセージが表示されます)、.Netアプリケーションは常に例外をスローします。アプリケーションで参照しているものよりもインストールされているOracleClient11。

これを解決するには、パブリッシャーポリシーが無視され、常にバージョンが読み込まれるようにapp.confを構成できます。

<configuration>
...
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342" />
        <publisherPolicy apply="no" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
于 2012-02-20T18:47:25.430 に答える
1

私はJAVAまたは.Netでこれを行うのに問題はありませんでした。実際、オラクルはそれは完全に問題ないと言っています。

このリリースには、OracleDatabase9.2以降にアクセスできるOracleDatabaseクライアント11.2.0.3が組み込まれています。Oracleは、EntityFramework4.1および4.2を含むMicrosoftVisualStudio2010および.NETFramework4でEntityFrameworkおよびLINQをサポートします。このリリースでは、CodeFirstはサポートされていません。

もちろん、それぞれに接続しながら同じプロセスをテストし、独自のテストで検証することもできますが、問題はないと思います。

于 2012-02-20T16:44:02.503 に答える