0

我已经在我的 Linux 机器上安装了 python Oracle 模块 cx_Oracle。oracle 用户和 root 用户都可以导入 cx_Oracle 并使用 cx_Oracle.Connection(...) 创建数据库连接。

服务器上的其他用户也可以导入 cx_Oracle,但是当他们尝试创建连接对象时,会引发以下异常:

>>> cx_Oracle.Connection('....')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
cx_Oracle.InternalError: No Oracle error?

我已经确认我要开始工作的用户设置了所有正确的系统变量,ORACLE_HOME、LD_LIBRARY_PATH、ORACLE_SID 和 PATH。该用户使用 sqlplus 并以这种方式连接到数据库也没有问题。

我认为这是一个文件权限问题,因为 oracle 和 root 用户都没有问题。我只是不确定哪个文件可能导致问题。

4

1 回答 1

1

我遇到了同样的问题,对我来说这是一些 Oracle 语言环境文件的访问权限。这个问题通过使其$ORACLE_HOME/nls/data内容具有世界可读性而得到解决。

为了找到问题,我写了一个小脚本test_oracle.py:

import cx_Oracle as oracle
conn = oracle.connect("user/pwd@host:port/SID")

然后跑去truss python test_oracle.py寻找访问问题(当然,在我曾经使用过的 Linux 上strace。)

于 2013-06-11T08:37:44.743 回答