java.lang.UnsatisfiedLinkError で libocijdbc10.so がロードできない場合の対処方法
またまたサーバ構築関連の不具合の備忘録。これも Oracle のバージョンが変わるたびにハマル場所。ちゃんと path とか設定したつもりで設定できていない罠。多分、自分が Java についてそんなに詳しくないからだと思われ。。。
今回出たエラーはこんな感じ。J2SE 5.0 + Oracle 10g R2 の環境です。
- スポンサーリンク -
Exception in thread "main" java.lang.UnsatisfiedLinkError: /db/u01/app/oracle/product/10.2.0/db/lib32/libocijdbc10.so: /db/u01/app/oracle/product/10.2.0/db/lib32/libocijdbc10.so: cannot open shared object file: No such file or directory at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1751) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1676) at java.lang.Runtime.loadLibrary0(Runtime.java:822) at java.lang.System.loadLibrary(System.java:992) at oracle.jdbc.driver.T2CConnection$1.run(T2CConnection.java:4073) at java.security.AccessController.doPrivileged(Native Method) at oracle.jdbc.driver.T2CConnection.loadNativeLibrary(T2CConnection.java:4069) at oracle.jdbc.driver.T2CConnection.logon(T2CConnection.java:221) at oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:441) at oracle.jdbc.driver.T2CConnection. (T2CConnection.java:132) at oracle.jdbc.driver.T2CDriverExtension.getConnection(T2CDriverExtension.java:92) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:839) at java.sql.DriverManager.getConnection(DriverManager.java:525) at java.sql.DriverManager.getConnection(DriverManager.java:171)
対処方法はこんな感じ。
- まずは、httpd 実行ユーザが指定の path にアクセス可能かを調査。今回の場合、apache ユーザが $ORACLE_HOME へのアクセス権がないため、$ORACLE_HOME へのアクセス権を付与した。
- 今回のサーバは AMD64 な CPU で RHEL3.0 x86_64 を使っているので、Oracle 10g も 64bit 版を使ってます。Google でいろいろ調べたところ、Java も 64bit が相性が良いらしい。つまりは、Linux AMD64 RPM in self-extracting file ってのをインストール。
- それでもまだエラーがでるので、環境変数の設定を変更。最終的にこんな形でうまくいった。
#JAVA export JDK_HOME=/usr/java export JAVA_HOME=/usr/java export PATH=$PATH:$JDK_HOME/bin # ORACLE 10gR2 export ORACLE_BASE=/db/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db export ORACLE_LIBPATH=$ORACLE_HOME/lib32:$ORACLE_HOME/lib export CLASSPATH=./:/usr/local/lib/apache/cgi-bin2/enqsys/:$ORACLE_HOME/jdbc/lib/ojdbc14.jar export ORA_NLS10=$ORACLE_HOME/nls/data export NLS_LANG=Japanese_Japan.JA16EUC export LD_LIBRARY_PATH=$JDK_HOME/lib:$ORACLE_HOME/lib:$ORACLE_HOME/lib32:$ORACLE_HOME/jdbc/lib export PATH=$PATH:$ORACLE_HOME/bin
3点目は、一応 32bit の共有ライブラリも 64bit の共有ライブラリも LD_LIBRARY_PATH に追加しておくことで、適宜読み込んでよと言う設定。Java 1.4 以降は CLASSPATH には ojdbc14.jar を設定。あと、ORACLE_LIBPATH なんてのも入れておく必要があるみたい。9i の時はこんなの無くても動いてたんですけどね。
あ、それと今回の不具合とは違うんですが、言語環境変数が ORA_NLS33 から ORA_NLS10 に変わってます。
Oracle もバージョンが変わるたびにいろいろと苦労します。
- スポンサーリンク -
コメントやシェアをお願いします!