Oracle12cのDBとClientを同じ端末にインストールしたら・・・
「Windows Server 2012 R2」 に、Oracle12cのDataBase(64bit)とClient(32bit)をインストールしたのですが、サーバー上で動作するVB.NETのアプリからODP.NETでデータベースに接続しようとすると、以下のようなメッセージが出て接続できませんでした。ハンドルされない例外のため、プロセスが中止されました。
例外情報:
System.AccessViolationException
例外情報:
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 件のコメント :
コメントを投稿