節約プログラマー雑記

ODP.NET(管理対象外 )のインストール

最近、仕事で管理対象外(Unmanaged)のODP.NETの環境構築を行いました。
ただ、作業を始めようとすると、今回の対象がOUIで配布しているバージョンと異なり、かつ、管理対象外に関する構築の情報が少なかったため、構築に非常に時間が掛かってしまいました。今回は、その備忘もかねて資料を残しておきたいと思います。

1. ODP.NET(管理対象外)とは

そもそもですが、ODP.NETには、「管理対象」と「管理対象外」という、2種類が存在します。私的な理解も含まれますが、ちょっと説明をすると、「管理対象」は12.1以降に登場したODP.NETであり、一部の機能を制限する代わりにOracle Clientを必要とせずにOracleと通信できるのに対し、「管理対象外」はOracle Clientを必要とするものの、ODP.NETの全ての機能ができるものとなっています。

「管理対象」に関しては、nugetで簡単にインストールをすることができますので、今回はこちらのサイトを参考にして実施した、「管理対象外」のインストール手順について書いています。

2. インストール方法

管理対象外のODP.NETのインストール方法は、OUIを利用するものと、xcopyを利用する2つがありますが、私は最新バージョンを利用する必要がありましため、xcopyの方法に関して書いていきます。(OUIを含め、正式なインストールのドキュメントはOracleのページ(19c版)にも書かれていますので、こちらも参照してみてください。)

インストールに必要なライブラリはOracleのサイトに存在していますので、まずはそこから自分の環境に必要なバージョンをダウンロードをしてきます。今回私は、19.10のODACを参照ページからダウンロードしました。(ダウンロードページ

ダウンロードが完了したら、ファイルの解凍し、管理者権限で立ち上げたコマンドプロンプトで解凍したフォルダに移動します。フォルダ配下にはinstall.batというバットファイルがありますので、それをinstall.bat all [インストール先フォルダ] [レジストリ登録名]のように実行します。実際に実行した例が次の通り。

コマンドプロプト実行結果

C:\ODP.NETUnmanaged19.10Xcopyx64> install.bat all "C:\oracle\product\19.10\client" OraClient19Home

コマンドが成功すると、下の画のように、指定したフォルダにライブラリ一式が格納されます。

odp_install.png

3. 環境設定

インストールが完了したら、Windows側の設定を行います。設定内容は大きく2点で、「環境変数の設定」、「レジストリの変更」になります。

まずは環境変数の設定から。設定項目は3点で「PATHへのOracle Clientの実行パスの追加」、「ORACLE_HOMEの設定」、「TNS_ADMINの設定」になります。これを設定しないと、Oracleとの通信が正常に動作せず、アプリを実行してもエラーとなってしまいます。今回、1.のコマンドで実行した場合だと、設定内容は次の通り。

・環境変数の設定
環境変数名 設定内容
PATHC:\oracle\client\product\19.10\client
ORACLE_HOMEC:\oracle\client\product\19.10\client
TNS_ADMINC:\oracle\client\product\19.10\client\network\admin

次はレジストリの変更ですが、レジストリエディタを起動して「¥¥HKLM¥Software¥Oracle¥KEY_{レジストリ登録名}¥NLS_LANG」の値に移動します。インストール時点では、「AMERICAN_AMERICA.WE8MSWIN1252」になっていますので、これを「JAPANESE_JAPAN.JA16SJIS」等、自身の環境で使う設定に変更します。これを変更しないと、NLS_LANGがアメリカのものとして動作してしまいますので、注意が必要です。

ここまで設定が完了すれば、Visual StudioからODP.NETが使えるようになります。ソリューションエクスプローラーの参照設定から、ORACLE_HOMEフォルダ配下の「\odp.net\bin\4\OracleDataAccess.dll」を参照して使ってみましょう。

4. 最後に

今回はXCOPYを利用した、ODP.NETのインストール方法の紹介でした。

ぶっちゃけ今は、管理対象のODP.NETの方がnuget一発で取得できて簡単だし、管理対象外でしか使えない機能を使う場面も正直、あまりないかと思っています。

それでも、過去の構築で管理対象外で構築されたアプリも多々あると思いますし、それをマイグレでそのまま移行することもあるかと思います。

今回の記事は、自分の備忘でもありますが、そんな管理対象外のODP.NETを使う方の参考になれば幸いです。