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

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

Q1。我们使用的是什么版本?
答。

    Python 3.6.12 

    OS : CentOS 7 64-bit

    DB : Oracle 18c 

    Django 2.2 

    cx_Oracle : 8.1.0
Q2。描述问题
答。使用“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 位
Q4。显示 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
非常感谢任何建议/帮助。
谢谢

最佳答案

我发现了问题
所以我刚刚从/etc/sysconfig/httpd 中删除了所有变量声明并检查,应用程序仍然能够访问 lib 文件,所以这些现在是多余的。
然后为 os 用户撤消之前在 .localsh 和 .localrc 文件中完成的所有变量声明。从头开始,一步一步看它在哪里中断。
所以现在,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 的符号链接(symbolic link) 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
而且……仅此而已!有效。

关于python-3.x - django.db.utils.DatabaseError : Error while trying to retrieve text for error ORA-01804,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66203715/

相关文章:

c - 限制线程可以调用哪些函数

python - 在 Python 3 中返回整数中最低有效位集的位置的最快方法是什么?

python - 使用pyinstaller创建可执行文件时出错

python argparse : arg with no flag

python - 如何更改像按钮一样的跨度文本

python - 在使用 ModelForm 创建的表单对象中设置用户字段

linux - 循环遍历多个目录的 bash 脚本的输出

python - Django 中的智能查询,与用户的多对多关系

jquery - 如何为基本身份验证发送正确的授权 header

c++ - 无法在 Linux : linker error 上构建 Box2D