2

Oracleデータベースに接続し、テキストファイルを開き、データベーステーブルのファイルからデータをロードするperlスクリプトがあります。スクリプトは、開発マシン(Windows xp 32ビット)で完全に機能しますが、スクリプトをにロードすると、本番サーバー(Windows 2003 64ビット)をコマンドラインから実行すると、perl.exeが開きます-コンポーネントウィンドウを見つけることができません、メッセージは言います

OCI.dllが見つからなかったため、このアプリケーションを起動できませんでした。アプリケーションを再インストールすると、この問題が解決する場合があります。

コマンドライン出力は次のとおりです。

install_driver(Oracle)が失敗しました:モジュールDBD :: Oracleの「C:/Perl64/lib/auto/DBD/Oracle/Oracle.dll」をロードできません:load_file:%1はC:/Perl64で有効なWin32アプリケーションではありません/lib/DynaLoader.pm 191行目。at(eval 14)line3コンパイルはrequire at(eval 14)行3で失敗します。おそらく、必要な共有ライブラリまたはdllは、c:\ warranty\warrantyImport.pl行で期待される場所にインストールされません。 15

oracleクライアントを再インストールしました。アクティブなperlとoracleクライアントの両方をアンインストールしてから、perlの前にoracleクライアントをインストールしようとしました。これにより、問題が発生する可能性があります。

パーミッションの可能性があると思ったので、oci.dllを開くための簡単なperlスクリプトを作成し、できない場合はエラーを発生させました。正しく開くことができました。

C:\ oracle \ product \ 10.2.0 \ client_1\binがPATH環境変数に含まれていることを確認しました。

SQLPlusを使用してデータベースに接続できます

OCI.dllをperlスクリプトと同じディレクトリに追加しました。

そして、私はついにアイデアを使い果たしました....誰かが何かを提案できますか、私はそれを機能させるために私の髪を引き裂いています。

詳細サーバーはActivePerl5.14.1ビルド1401(64ビット)を実行しています。Oracleデータベースは10gです。Oracleクライアントは10.2.0です。

4

2 に答える 2

3

同様の問題がありましたが、Perl の 64 ビット バージョンの場合です。正しいクライアント ライブラリを取得し、次のガイドを読むことで問題を解決できました:
http://www.pythian.com/news/11115/dbdoracle-and-windows-64bit/

基本的に、私は Oracle 11g XE R2 を実行していますが、これは 32 ビットのみです。そのため、64 ビットのクライアント ライブラリを探していて、見つからなかったのではないかと疑っていました。だから私はダウンロード し まし た:
instantclient-basic-windows.x64-11.2.0.3.0.zip : http://www.oracle.com/technetwork/topics/winx64soft-089540.html そして、c:\oraclexe\instantclient_11_2 にインストールされます




これらをパスに追加しました:
C:>set PATH = c:\oraclexe\instantclient_11_2;%PATH%
しかし、残念ながらエラーは持続しました:(

PATH:
echo %PATH%
を確認すると、セットが無視されていることがわかりました。それは権限の問題だったと思います。

そこで、システム パス変数を編集し、コマンド プロンプトを再起動しました。これで問題が解決し、接続できるようになりました:)

于 2013-01-20T14:56:18.977 に答える
2

32ビットと64ビットのコンポーネントをいくつか混合しましたか。明らかに、64ビットのPerl、64ビットのDBIとDBD :: Oracle、およびOracleクライアント用の64ビットのdllが必要です。エラーには「で有効なWin32アプリケーションではありません」と表示されているので、確認することをお勧めします。

于 2011-07-27T16:30:02.897 に答える