【问题标题】:ocijdbc11 Not found in java.library.pathocijdbc11 在 java.library.path 中找不到
【发布时间】:2017-12-26 16:35:04
【问题描述】:

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

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

结果我收到错误:“ocijdbc11 (Not found in java.library.path)”。

这里是我的问题:

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

以防万一:

$ 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——同样的错误。你能帮我解决它吗?

【问题讨论】:

    标签: java oracle jdbc aix oracle-call-interface


    【解决方案1】:

    要运行您的程序,您将需要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。这是故意的吗?

    【讨论】:

    • 一切都和你写的一样……但还是不行(
    • 请编辑您的帖子并粘贴相关行...或附加为文件或其他内容...
    【解决方案2】:

    ocijdbc11 是一个本地库(.so 或 .dll),您可以从 Oracle Instant Client 下载它。它是包含对 OCI 的 JNI 调用的层。如果要使用厚驱动程序,则需要此库。请务必安装与您的 ojdbc jar 匹配的版本(即,看起来您使用的是 11.2 的 JDBC jar,否则如果您使用的是 12.1 的 ojdbc jar,则会抱怨缺少 ocijdbc12)。

    【讨论】:

    • “看起来您使用的是 11.2 的 JDBC jar”——是的,我想是的。但是如何将路径更改为 12.1?它只是一些环境变量还是我应该重新编译java程序?
    • 你不需要重新编译。只需将 JDBC jar 替换为 12.1 或 12.2 中的 jar,您可以从 Oracle JDBC 下载页面下载该 jar。请注意,12.2 中的版本仅适用于 JDK8 或更高版本(不支持 JDK7)。
    • " 只需将 JDBC jar 替换为 12.1 中的 jar" -- 替换在哪里? Java 使用 Oracle 11.2,但我希望它使用 12.1(
    • 查看您的类路径以查看您当前使用的是哪个 JDBC jar,如果需要,请将其替换为较新的驱动程序。
    猜你喜欢
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    相关资源
    最近更新 更多