【问题标题】:django.db.utils.DatabaseError: Error while trying to retrieve text for error ORA-01804django.db.utils.DatabaseError:尝试检索错误 ORA-01804 的文本时出错
【发布时间】:2021-05-18 02:02:34
【问题描述】:

第一季度。我们使用的是什么版本?

回答。

    Python 3.6.12 

    OS : CentOS 7 64-bit

    DB : Oracle 18c 

    Django 2.2 

    cx_Oracle : 8.1.0

第二季度。描述问题

回答。使用“python3 manage.py runserver”运行服务器时 应用程序能够联系 Oracle DB 并显示 Django 管理页面,登录也可以。
但是当我们通过安全 SSL 端口使用基于 Apache (HTTPD) 的 URL 访问应用程序时,我们确实看到了 Django 页面和管理页面,但登录到管理页面时出现内部服务器错误。

在日志中,我们看到

"django.db.utils.DatabaseError: Error while trying to retrieve text for error ORA-01804"

cx_oracle 能够正确连接到数据库,另一个应用程序也在同一个 httpd 代理后面使用同一个数据库并且工作正常 Q3。显示安装 Oracle 客户端库的目录列表(例如 Instant Client 目录)。它是 64 位还是 32 位? 答。 64位

第四季度。显示 PATH 环境变量(在 Windows 上)或 LD_LIBRARY_PATH(在 Linux 上)设置为什么?

    LD_LIBRARY_PATH=/srv/vol/db/oracle/product/18.0.0/dbhome_1/lib:/lib:/usr/lib
    PATH=$ORACLE_HOME/bin:/srv/vol/db/oracle/product/18.0.0/dbhome_1/lib:$PATH

Q5。显示任何 Oracle 环境变量集(例如 ORACLE_HOME、ORACLE_BASE)。

    ORACLE_HOME=/srv/vol/db/oracle/product/18.0.0/dbhome_1
    TNS_ADMIN=$ORACLE_HOME/network/admin
    NLS_LANG=AMERICAN_AMERICA.AL32UTF8
    ORACLE_BASE=/srv/vol/db/oracle
    CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/lib

非常感谢任何建议/帮助。 谢谢

【问题讨论】:

标签: python-3.x django linux centos cx-oracle


【解决方案1】:

我发现了问题

所以我刚刚从 /etc/sysconfig/httpd 中删除了所有变量声明并检查,应用程序仍然能够访问 lib 文件,所以这些现在是多余的。

然后取消之前在 .localsh 和 .localrc 文件中为 os 用户所做的所有变量声明。从头开始,一步一步看它在哪里中断。

所以现在,cx_Oracle 在错误的目录中寻找 lib 文件 $ORACLE_HOME/client_1/lib 代替 $ORACLE_HOME/lib

DPI-1047: Cannot locate a 64-bit Oracle Client library: "$ORACLE_HOME/client_1/lib/libclntsh.so: cannot open shared object file: No such file or directory". See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help

我在 dbhome_1 中没有任何名为“client_1”的子文件夹

所以我刚刚创建了一个指向 dbhome_1 的符号链接 client_1(对此仍然不确定,但至少它可以工作:))

所以,现在,这个错误消失了,但现在又出现了 ORA-01804。 ?

我在某处读到,可以通过添加“libociei.so”来修复此错误,但我的实例上没有,所以我使用以下命令生成它:-

mkdir -p $ORACLE_HOME/rdbms/install/instantclient/light
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk igenliboci

然后我只是将这个 libociei.so 文件从 $ORACLE_HOME/instantclient 到 $ORACLE_HOME/lib

现在出现了一个新错误(所以..进步?): ORA-12546 - TNS 权限被拒绝。 这很容易解决?

我使用这个命令来解决这个问题:-

setsebool -P httpd_can_network_connect on

而且……仅此而已!它奏效了。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 2014-08-21
  • 1970-01-01
相关资源
最近更新 更多