0

問題は、ODP.NET 2.111 と ODP.NET 4.112 を同じマシンに並べてインストールし、両方が tnsnames.ora を使用して同じデータベース サーバーを指すようにする方法です。

Oracle 11.1.0 に基づくレガシー システムをサポートする必要があります。システムは ODP.NET 2.111 を使用して Oracle に接続しています。次の場所に 2 つのクライアントがインストールされています。

C:\oracle\product\11.1.0\client_1

C:\oracle\product\11.1.0\client_2

両方の tnsnames.ora は次のようなものです。

xxxx1_SERVICE=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = xxxx2)(PORT = xxx3))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = xxx4)
    )
  )

yyyy1_SERVICE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = yyyy2 )(PORT = yyyy3))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = yyyy4)
    )
  )

kkkk1_SERVICE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = kkkkk2 )(PORT = kkkk3))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = kkk4)
    )
  )

pppp1_SERVICE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ppppp2 )(PORT = pppp3))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = pppp4)
    )
  )

oooo1_SERVICE = (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ooooo2 )(PORT = oooo3))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = oooo4)
    )
  )

システムは上記の設定を使用して稼働しています。新しいバージョンの Oracle.DataAccess.Dll (4.112) を使用する必要がある EntityFramework に基づく新しいシステムを開発する必要があります。

レガシーシステムの機能を損なわずに新しいクライアントをインストールして、両方が並行して動作できるようにするにはどうすればよいか疑問に思っていました。

注: 以前のクライアントに新しい ODP.NET をインストールしようとしたところ、次の接続文字列を使用してデータベースに接続できました。

DATA SOURCE=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=zzzzz1)(PORT=zzzzz2)))(CONNECT_DATA=(SERVICE_NAME=zzz3_SERVICE)));ユーザーID=\"zzzz4\";パスワード=\"zzzz5\";

1- ODP.NET のアップグレードにより Oracle に接続できなくなるため、レガシー システムが壊れる 2- 接続文字列が非常に奇妙に見えるため、これは望ましくありません。

助けていただければ幸いです。

ありがとう、エイディン

4

1 に答える 1

0

簡単な答え:

注: 以前のクライアントに新しい ODP.NET をインストールしようとしましたが、次の接続文字列を使用してデータベースに接続できました...

これは、新しいインストールの /Network/Admin に tnsnames.ora および sqlnet.ora がないことを示しています。新しい ODP.net インストールを使用して古いクライアントに問題がない場合は、古いインストールからそれらをコピーするか、TNS_ADMIN環境変数を使用してすべてのインスタンスのグローバルな場所を指定できます。TNS_ADMIN=C:\MyOracleFilesDir

長い答え:

新しいクライアントをインストールすると、ほとんどの場合、アセンブリ解決プロセス中に古い Oracle.DataAccess.dll への参照を新しいバージョンにリダイレクトするパブリッシャー ポリシー ファイルも GAC にインストールされます。次に、Oracle.DataAccess は、レジストリ内のパラメーター (DllPath) を介してクライアントを見つけます。.config ファイルで dllPath を設定することにより、この場所をオーバーライドできます。

<configuration>
  <oracle.dataaccess.client>
    <add key="DllPath"            value="C:\yourotherpath"/>
  </oracle.dataaccess.client>
</configuration>

これは一般的に私が行うことですが、これをさらに理解するにつれて、古いクライアントに対して新しい dll を強制していることに気付きました。古いクライアントをそのままにしておくことが目標である場合、GAC からパブリッシャー ポリシーを削除することをお勧めします (完全な ODAC インストールではインストールされていないと思います。ODP.net のみです)。

GAC スクリーンショット

それらを再インストールする必要がある場合は、通常、oraclepath\odp.net\PublisherPolicy にあります。

もう 1 つの、おそらくより長期的なオプションは、発行元ポリシーを無視するように古いクライアントを構成することです

最後に、2.0 フレームワークと 4.0 フレームワークの .net コンポーネントは、ODP.net のインストール時に個別のインストール オプションであると確信しています。2.0 コンポーネントをインストールしないだけで、この問題を回避できると思います。その点については、代わりに 64 ビット odp.net に対して新しいプロジェクトを開発することで、同様の回避策を実行できます。v2.0 と v4.0 のように、32 ビットと 64 ビットもお互いを認識しません。

于 2013-03-19T20:35:52.750 に答える