LoginSignup
3
2

More than 3 years have passed since last update.

Oracle x86とx64を共存させる

Posted at

共存させたい理由

Visual Studio の開発で、x64限定のライブラリを利用している時、実行プラットフォームがx64にするわけだが、この状態で、Instant Client (ODP.NET) をx86、x64のどちらともインストールされていると、どうも接続がうまくできない。

『Oracle クライアント ライブラリを読み込もうとしましたが、BadImageFormatException が発行されました。この問題は、32 ビットの Oracle クライアント コンポーネントがインストールされている環境で 64 ビット モードを実行すると発生します。』
って言われる。

でも、開発環境を分離できない状況で、x86としても開発するし、x64でも開発するし、だとすると、Instant Client を入れたり消したりなどしないとダメそうで勝手が悪い。

やり方

Oracle Instant Client の64ビット版と32ビット版を共存させる方法に載ってた。

System32とSysWOW64に、それぞれシンボリックリンクを張ればいいそうな。
『oracle_instant_client12_2』部分は任意だけど、どちらも同一でなければならない。

-- x64のシンボリックリンクを張る
C:\> cd C:\Windows\System32
C:\Windows\System32> mklink oracle_instant_client12_2 C:\Oracle\instantclient_12_2x64

-- x86のシンボリックリンク張る
C:\> cd C:\Windows\SysWOW64
C:\Windows\SysWOW64> mklink oracle_instant_client12_2 C:\Oracle\instantclient_12_2x86

んで、環境変数のPATHに、

C:\Windows\System32/oracle_instant_client12_2

を追加すればいいらしい。

確認

Visual Studio でx86、x64プラットフォームどちらでも接続ができた!

足りないこと

上記の方法はOracleの実行イメージ?を切り替えるものであり、コマンドについても対応しているわけではない。
sqlplusなどを実行したい場合は、そのパスも環境変数のPATHに追加しなければならない。

私の場合、SI Object Browser などや、x86開発も多くあるため、コマンドとしてはx86の Instant Clientのパス情報を通すようにした。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2