ocijdbc11在java.library.path中找不到

时间:2017-07-20 19:40:10

标签: java oracle jdbc aix oci

我从其他开发者那里继承了一个小的java实用程序 - 只有几个.java文件和可执行文件.jar。

我通过传递连接字符串来运行java程序。现在我需要将连接字符串从jdbc:oracle:thin:<user>/<password>@host更改为jdbc:oracle:oci:<user>/<password>@host以开始使用thick而不是瘦驱动程序。

结果我收到错误:&#34; ocijdbc11(在java.library.path中找不到)&#34;。

我的问题在这里:

  1. ocijdbc11是ojdbc7.jar的一部分吗?或者java需要什么文件? ANSW:ocijdbc11是一个库:/oracle/client/o11r2/lib/libocijdbc11.so
  2. 如何查看java用于查找ocijdbc11
  3. 的路径

    以防万一:

    $ ls /oracle/client/o12r1/
    
    assistants     diagnostics    jlib           oui            slax
    bin            dmu            ldap           owm            sqlplus
    cdata          has            lib            perl           srvm
    cfgtoollogs    hs             network        plsql          ucp
    clone          install        nls            precomp        usm
    crs            instantclient  odbc           QOpatch        utl
    css            inventory      OPatch         racg           wwg
    cv             javavm         opmn           rdbms          xdk
    dc_ocm         jdbc           oracore        relnotes
    deinstall      jdk            oraInst.loc    root.sh
    

    UPD 我尝试使用选项-Djava.library.path=/oracle/client/o11r2并遇到其他错误。但我仍然不知道如何使用Oracle 12.1而不是11.2。

    UPD2 我已经更改了使用Oracle 12而不是11的环境路径。现在错误看起来像ocijdbc12 (Not found in java.library.path)。文件/oracle/client/o12r1/lib/libocijdbc12.so存在。

    我将/oracle/client/o11r2/lib添加到LD_LIBRARY_PATH - 同样的错误(ocijdbc12 (Not found in java.library.path))。我尝试了选项-Djava.library.path=/oracle/client/o12r2/lib - 同样的错误。你能帮我解决一下吗?

2 个答案:

答案 0 :(得分:1)

ocijdbc11是一个本机库(.so或.dll),您可以从Oracle Instant Client下载它。它是包含对OCI的JNI调用的层。如果要使用粗驱动程序,则需要此库。一定要安装与你的ojdbc jar相匹配的版本(即看起来你正在使用11.2的JDBC jar,否则如果你使用的是12.1的ojdbc jar,那么错误就会抱怨ocijdbc12缺失了。)

答案 1 :(得分:0)

要运行您的计划,您需要ojdbcN.jarlibocijdbcM.so。这些组件必须来自同一个Oracle客户端; N 指的是Java版本, M 指的是Oracle版本。

当然,您也需要libclntsh.so及其依赖库。

你可以尝试这个(假设java7,64位):

export ORACLE_HOME=/oracle/client/o12r1
export LIBPATH=$ORACLE_HOME/lib
java -cp $ORACLE_HOME/jdbc/lib/ojdbc7.jar:... -Djava.library.path=$ORACLE_HOME/lib

编辑:java可执行文件和库应该具有相同的位数(32或64),例如,这种组合将不起作用:

$ file $JAVA_HOME/bin/java $ORACLE_HOME/lib/libclntsh.so $ORACLE_HOME/lib/libocijdbc12.so
/usr/java6/bin/java: executable (RISC System/6000) or object module not stripped
/orabin/OraHome_Current/lib/libclntsh.so: 64-bit XCOFF executable or object module not stripped
/orabin/OraHome_Current/lib/libocijdbc12.so: 64-bit XCOFF executable or object module not stripped

这里的java是32位的,Oracle是64位的。

编辑:此问题标记为AIX。这是故意的吗?