【发布时间】:2020-09-03 16:11:41
【问题描述】:
我正在尝试从在安装了 Oracle 即时客户端 (12.2) 的 Oracle linux 7 机器上运行的 python 脚本连接到 Oracle 数据库。 客户端安装好像没问题,我可以做
export ORACLE_HOME=/u01/app/oracle/product/12.2.0.1/client
export LD_LIBRARY_PATH="${ORACLE_HOME}/bin:${LD_LIBRARY_PATH}"
$ORACLE_HOME/bin/sqlplus <username>/***@<connection_string>
它有效。 当我在执行 python 脚本之前导出 ORACLE_HOME 和 LD_LIBRARY_PATH 时,该脚本也可以正常工作。 重点是:我想在 python 脚本中设置这些变量。我试过了
os.environ["ORACLE_HOME"] = "/u01/app/oracle/product/12.2.0.1/client"
然后
os.environ["LD_LIBRARY_PATH"] = "/u01/app/oracle/product/12.2.0.1/client/bin"
或(周围有一些try-except-block)
os.environ["LD_LIBRARY_PATH"] = "/u01/app/oracle/product/12.2.0.1/client/bin:" + os.environ["LD_LIBRARY_PATH"]
在脚本的最开始,但我不断收到类似的错误
DPI-1047: Cannot locate a 64-bit Oracle Client library: "libmql1.so: cannot open shared object file: No such file or directory".
我还让 python 脚本在设置数据库连接之前打印出 LD_LIBRARY 变量——它显示了正确的值。在我看来,变量的“导出”不知何故不起作用,好像 Oracle 客户端的调用没有得到正确的数据。
如果您知道我可以尝试或测试什么,请不要犹豫,在这里写下来。我很高兴获得有关该问题的新意见。 问候,
凯瑟琳
PS:是的,我知道,我不应该在没有安装真正的 Oracle 主目录的服务器上设置 ORACLE_HOME。请不要专注于此。
【问题讨论】:
-
从安装路径看来,您有一个“完整”客户端,因此需要设置 ORACLE_HOME,因为它会被引用来查找消息文件等数据文件。只有拥有 Oracle Instant Client 才不会设置 ORACLE_HOME。
-
我自己设置了安装路径,这样无论是数据库服务器还是客户端,我都可以使用相同的路径。