ODP.NETでAccessViolationExceptionが発生した場合に確認すること

AccessViolationException

Oracle12cのDBとClientを同じ端末にインストールしたら・・・

「Windows Server 2012 R2」 に、Oracle12cのDataBase(64bit)とClient(32bit)をインストールしたのですが、サーバー上で動作するVB.NETのアプリからODP.NETでデータベースに接続しようとすると、以下のようなメッセージが出て接続できませんでした。

ハンドルされない例外のため、プロセスが中止されました。
例外情報:
System.AccessViolationException

コネクションのOpenのところで発生します。

別の端末(Oracle Clientのみインストール)からODP.NETで上記のデータベースに接続すると、問題なく繋がります。


>>自社で腰を落ち着けて仕事がしたい方は【社内SE転職ナビ】へ


環境変数もGACも特に異常なし

環境変数とGAC(グローバルアセンブリキャッシュ)を確認しても、特におかしな所はない。(と思うんだけど・・・(汗)

検証用にWindows7の端末を用意して、試しにOracle11gデータベースとOracle12cクライアントを同じ端末にインストールしてみましたが、それでもAccessViolationExceptionが発生して繋がりませんでした。

同じ端末にDBとClientがあって、同一端末のClientからDBに接続しようとすると何かおかしくなるのか?それとも何かミスってる?

旧バージョンのOracleでは1つの端末にDBとクライアントを入れるなんて何回もやってきたし、できないなんてことはないと思うんだけどなぁ・・・。

行き詰ったのでOSの再インストールからやり直してみましたが駄目でした。

解決方法

OracleClientのOraProvCfgを使ってOracle.DataAccess.dllをGACに再登録することで、正常に動作するようになりました。

以下、その手順です。

1.管理者権限でコマンドプロンプトを開き、ORACLE_HOMEにOracleClientのディレクトリパスを設定
>SET ORACLE_HOME=D:\oracle\client\product\12.1.0\client_1

2.OraProvCfg.exeが格納されているディレクトリへ移動
>cd /d %ORACLE_HOME%\ODP.NET\bin\4

3.Oracle.DataAccess.dllをGACに登録
>OraProvCfg /action:gac /providerpath:%ORACLE_HOME%\ODP.NET\bin\4\Oracle.DataAccess.dll

4.Policy.4.121.oracle.dataaccess.dllをGACに登録
>OraProvCfg /action:gac /providerpath:%ORACLE_HOME%\ODP.NET\PublisherPolicy\4\Policy.4.121.oracle.dataaccess.dll

5.Oracle.DataAccess.resources.dllをGACに登録
>OraProvCfg /action:gac /providerpath:%ORACLE_HOME%\ODP.NET\bin\4\Oracle.DataAccess.resources.dll

6.PCを再起動

GACにOracle.DataAccess.dllが登録されていることは確認していたのですが・・・。

データベースをインストールし後にクライアントを入れたことで、パスか何かが上書きされてしまうのでしょうか?

こういうの、よくわかりませんねぇ。

<スポンサーリンク>


0 件のコメント :

コメントを投稿