- PR -

servletからデータベースへの接続エラーについて教えてください

1
投稿者投稿内容
とまと
会議室デビュー日: 2006/10/04
投稿数: 3
投稿日時: 2006-10-04 18:36
はじめまして。
突然ですが、教えてください。

webアプリケーション作成して、本番サーバーに移行中なのですが、
データベースに接続するサーブレットを呼び出したときに、エラーがでてしまいます。
エラーの内容は、
java.lang.UnsatisfiedLinkError: no ocijdbc9 in java.library.path
となっています。
環境変数について調べたのですが、solarisの情報が多く、windowsでの解決策を
見出すことができませんでした。

ご教授よろしくお願いします。

〔環境〕
(APサーバ)
OS windows2000server
Tomcat5.5.17
Apache2.2.58
mo_jk2.so
Oracle cliant

(DBサーバ)
OS Linux
DB Oracle9i 9.2

以上です。
うえだ
ベテラン
会議室デビュー日: 2006/01/21
投稿数: 52
投稿日時: 2006-10-04 19:17
環境変数の
JAVA_HOME
PATH
CLASSPATH
は正しく設定されていますか?
かしん
常連さん
会議室デビュー日: 2004/08/27
投稿数: 25
お住まい・勤務地: 窓際
投稿日時: 2006-10-04 19:17
APサーバのOracle cliantってのは、oracleのJDBCもインストールしてあるという前提で。
ocijdbc9.dllというライブラリが存在しないから、例外が発生しているようにスタックトレースからは見えます。
ファイルがあるのであれば、パスが通ってない可能性が高く、環境変数LD_LIBRARY_PATHか、JAVA_OPTSに"-Djava.library.path="の設定に、ocijdbc9.dllが格納されているディレクトリのパスを設定すれば解消すると思います。


--追加
http://72.14.235.104/search?q=cache:lHwNhp0GOI0J:myjdbc.tripod.com/basic/jdbcoci.html+ocijdbc9.dll+java.lang.UnsatisfiedLinkError&hl=ja&gl=jp&ct=clnk&cd=2

[ メッセージ編集済み 編集者: かしん 編集日時 2006-10-04 19:23 ]
あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2006-10-05 00:31
PATH に %ORACLE_HOME%\lib か %ORACLE_HOME%\bin を追加すればよさそうですね。
ocijdbc9.dll を system32 あたりに放り込んでも解決しそうですが。
とまと
会議室デビュー日: 2006/10/04
投稿数: 3
投稿日時: 2006-10-05 11:25
アドバイスありがとうございました。

>うえださん
環境変数は
JAVA_HOME C:\\Program Files\\Java\\jdk1.5.0_05
PATH C:\\oracle\\ora92\\bin;C:\\Program Files\\Java\\jdk1.5.0_05\\bin;
CLASSPATH C:\\oracle\\ora92\\jdbc\\lib;C:\\oracle\\ora92\\jdbc\\lib\\ojdbc14.jar;
を設定しております。

>かしんさん
ご指摘にありました通り、ocijdbc9.dllは%ORACLE_HOME%\\binに存在していたので、
LD_LIBRARY_PATHに上記のパスを追加いたしました。また、JAVA_OPTSにも
"-Djava.library.path=%ORACLE_HOME%\\bin"を設定いたしました。
結果は、以前と同様の結果でした。

>あんとれさん
ご指摘にありましたとおり、PATHに%ORACLE_HOME%\\binと%ORACLE_HOME%\\libの両方を
追加し、またocijdbc9.dllをsystem32に放り込みましたが、同じ結果がでました。

そして今回、データベースにログを出力するためにlog4jを使用しているのですが、
その設定ファイルからDB接続情報の記述を削除し、別のエラーが出たので調査したところ、
DriverManager.getConnection()でとまってしまいます。
今回、開発するにあたって、Eclipseを用いたのですが、そちらでは正常に動作していたので、
全く検討がつかない状況となっております。

申し訳ありませんが、再度ご指摘お願いいたします。
よろしくお願いいたします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-10-05 20:26
LD_LIBRARY_PATH環境変数は、特定のUnix(Solarisなど)で参照されるものですので、
Windowsでは設定する必要はありません(PATH環境変数がそれに対応します)。それから
ドライバの動作にはocijdbc9.dll以外のファイルも必要になりますので、System32など
に放り込むだけでは動作しないでしょう。

OCIクライアントの実行には、ORACLE_HOME環境変数が設定されている必要があると
思いますが、そちらは大丈夫でしょうか。書き込みの内容からすると大丈夫そうですが。

引用:

とまとさんの書き込み (2006-10-05 11:25) より:
今回、開発するにあたって、Eclipseを用いたのですが、そちらでは正常に動作していたので、
全く検討がつかない状況となっております。


もしかして、サービスで動かした場合に障害が発生する、ということですか?
環境変数をユーザ環境変数で設定していたり、サービスの実行ユーザにOracleのインス
トールディレクトリへのアクセス権がないとかいうことはありませんか?
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2006-10-06 09:36
(一般公開情報だから問題ないよな...?)

http://support.oracle.co.jp/ -> 製品 FAQ 検索 -> キーワードに
「NTFS」と「権限」とで検索するとヒットする情報に該当しそうな
気がする...。

_________________
もしもし@RMAN 友の会
とまと
会議室デビュー日: 2006/10/04
投稿数: 3
投稿日時: 2006-10-06 13:07
アドバイス、ありがとうございました。

>ukさん
>もしもしさん
アクセス権は調査の結果、問題ありませんでした。

Tomcatのプロパティのjava optionsにパスを追加し、oracleのbinの中身を
全てSystem32にコピーしたら、システムは動作するようになりました。
しかし、追加した環境変数などでどれが必要でどれが必要でないのかの整理・
原因究明をするために、環境変数やSystem32にコピーしたファイルを全て
削除するという作業を行ってもシステムが動作する現状になってしまいました。
削除した環境変数は、
JAVA_OPTS
LD_LIBRARY_PATH
ORACLE_HOME
CLASSPATH
です。

存在している環境変数は
JAVA_HOME=C:\\Program Files\\Java\\jdk1.5.0_05
Path=C:\\Program Files\\Java\\jdk1.5.0_05\\bin;C:\\Program Files\\Oracle\\jre\\1.3.1 \\bin;C:\\Program Files\\Oracle\\jre\\1.1.8  \\bin;C:\\WINNT\\system32;C:\\WINNT;C:\\WINNT\\System32\\Wbem
です。

もし何か手がかりになる情報ございましたら
アドバイスお願いいたします。
1

スキルアップ/キャリアアップ(JOB@IT)