猫と水槽

PerlからOracleをアクセスしようとして嵌ったのでメモのページです。

スポンサーサイト

--年--月--日 --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--年--月--日 --:-- トラックバック(-) コメント(-)

PerlからOracleをアクセスしようとして嵌ったのでメモ

2015年11月27日 16:47

PerlからOracleをアクセスしようとして嵌ってしまい、ネット検索するも古い記事ばかり

やっと解決したのでメモしときます!!
OS  Windows Server 2008 R2 Standard Service Pack 1
Perl  ActivePerl-5.20.2.2002-MSWin32-x64-299195.msi
Apache  httpd-2.4.17-win64-VC14.zipを解凍して、'C:/Perl64へまるごとコピー
Visual Studio 2015用の最新のC ++再頒布可能パッケージvc_redist.x64.exeをインストール


きっかけはPerlからOracleをアクセスした時にApacheに以下のエラーが発生するところから始まった
AH01215: install_driver(Oracle) failed: Can't locate DBD/Oracle.pm in @INC (you may need to install the DBD::Oracle module) (@INC contains: C:/Perl64/site/lib C:/Perl64/lib .) at (eval 5) line 3.

Oracle.pmが無いと怒られて調べてみると確かに無い!!

PPMで確認するとDBD-Oracleはデフォルトで1.74が存在するのですが、念のためMark for installで追加するとsiteにDBD-Oracle1.74がインストールされた。

すると、上記エラーは出なくなり、Oracle.pmもできてる@@
ところが今度は
AH01215: install_driver(Oracle) failed: Can't load  'C:/Perl64/site/lib/auto/DBD/Oracle/Oracle.dll' ・・・

どうやらOracle.dllが読めないよと怒っているようだが、ちゃんと実在するのです。
このエラーが出てからまたまたネット検索の毎日。

やっとのおもいでOracle Instance Clientをダウンロードして、この中にあるoci.dllを./Perl64/bin配下にコピーすれば良さそうだとの情報を見つけてやってみた。

最新版の64bit用を入手すれば良いだろうとOracleサイトからWindows用のInstance Client Basic 12.1 64bitをダウンロード
instanceclient-basic-windows .x64-12.1.0.2.0.zip

zipを解凍するとoci.dll以外にも複数のdllがあったので7個ともまとめてPerl64/bin配下にコピー

ところが、現象は変わらず
AH01215: install_driver(Oracle) failed: Can't load  'C:/Perl64/site/lib/auto/DBD/Oracle/Oracle.dll' ・・・


それからさ迷うこと数日
結果はinstanceclient-basic-windows .x64-12.*.*.*.*.zipはOracle 12g用で、アクセスしたかったOracleは11gだったというお粗末な話し。
instanceclient-basic-windows .x64-11.2.0.4.0.zipをダウンロードしなおして、この中のdllをPerl64/bin配下にコピーして完了!!
※Windowsの場合、 PATH環境変数で設定された場所ならOKのようです。

ちなみに、PHPの場合はWindows/system32配下に同じものをコピーして、php.iniの900行付近にある
;extension=php_oci8.dll ; Use with Oracle 10gR2 Instant Client
;extension=php_oci8_11g.dll ; Use with Oracle 11gR2 Instant Client
をOracleのバージョンに合わせてコメントアウトを解除してやったら動作しました^^

その後、7個のdll
oci.dll
ocijdbc11.dll
ociw32.dll
ornnzsbb11.dll
oraocci11.dll
oraociei11.dll
orasql11.dll
のうち、oci.dll と oraociei11.dll の2個のDLLが存在すれば接続のみはOKでしたが、他の処理でエラーが出るのが怖いので7個ともコピーしときました。

関連記事

2015年11月27日 16:47 トラックバック(0) コメント(0)












管理者にだけ公開する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。