何をしたか
レガシーサーバ(win2003)環境をwin2019に移行する中で、あるアプリでoracleドライバが必要なことが判明。それもoracle10g。 今回はwindows2019サーバにoracle instant client(10.2)をインストールしたときの記録です。
環境
- windows2003sp2(移行元)
- windows2019(移行先)
- 移行元にある、とあるアプリ(実行したらoracle10ドライバが見つからないというログを吐く)
ログが10gに言及しているならoracleドライバがいるのだろう。ということで、oracle instant clientをダウンロードする
やったこと
oracle instant client(32bit)のダウンロードサイト(※1)に行き、basicとodbcのzipをダウンロード
ダウンロードした2つのzipを解凍して同じフォルダに配置(いわゆるガッチャンコ)
移行元のサーバからoracleドライバのフォルダ(productフォルダ内にある「network」フォルダ)をコピーし、新サーバのinstantclientフォルダ内に貼りつけ(この中にあるtnsname.oraが接続定義なのです)
コマンドプロンプトで上記のフォルダに移動し(※2)、odbc_install.exeを実行
→ここまでやるとodbc作成時の選択肢に「Oracle in instantclient10_2」が現れるODBCデータソースからOracle in instantclient10_2を選び(※3)、接続情報を入力する。
→終了!
ハマり・しくじり
※1 win2019は64bitですが、対象のアプリが32bitなのです。
それに気づかず64bitのinstantclientのインストール後に「odbc(32bit)に選択肢が出てこないぞ?」となってました※2 ハマったので結論だけ書きますが、カレントディレクトリが配置フォルダになっていないと「Couldn't find Oracle Instant Client in present directory」と返されて終わります。
※3 odbc画面で「Oracle in instantclient10_2」を選択して次へ行こうとすると下記のメッセージが出て終了してハマる
システム エラー コード 126:指定されたモジュールが見つかりません。 (パス\SQORAS32.DLL)のために、Oracle in instantclient10_2 ODBCドライバーの セットアッププログラムを読み込むことができません。
ランタイムだな..とあたりをつけて探し回るといかにもそれな記事を見つけるが、必要なファイルのうちMFC71.DLLだけ見つからない。
ファイル名からvc++ランタイムなのは自明なので、vector内で「vc++」で検索するとVC++ .NET ランタイムインストーラー 1.0が見つかる。ダウンロード・解凍したフォルダから「mfc71.dll、msvcp71.dll、msvcr71.dll」をコピーしてwin2019のc:\windows\sysWOW64」に貼りつけたらやっと動いた。
かれこれサーバ移行は物理→仮想(hyper-v)→osアップグレードとやってるけど、ここまで古いOSだといろいろめんどくさい。
- smb2.0をサポートしてないので、ファイルを直送できない
→かといってwin2019にsmb1.0機能(たとえsmbクライアントでも)持たせるのは、前回の記事を考えるとやりたくない - タスクスケジューラのエクスポート形式がwin2019と合わない(移行元から接続して対応)
- IIS(FTP)も使われていて、管理画面の違いを脳内変換しないといけない
- たいがいのアプリは動くけど、今回みたいにDLLをsysWOW64に置かないといけない時がある(動かしてみないとわからない)
面倒ではあるけれど、20年前の環境で動かしたプログラムが今でも動くのはさすがwindows。「互換性の鬼」と言われるだけある。