我在将 C++ 应用程序连接到 Oracle DB 时遇到问题,出现错误
"[OracleException] errcode: 1804, desc: Error while trying to retrieve text for error ORA-01804".
我在将 C++ 应用程序连接到 Oracle DB 时遇到问题,出现错误
"[OracleException] errcode: 1804, desc: Error while trying to retrieve text for error ORA-01804".
cx_oracle(通过python)我得到了同样的错误。对于这种特定情况,环境变量中缺少 ORACLE_HOME。使用 Windows Cli 设置 Oracle_home(使用您的 oracle 文件夹):
setx ORACLE_HOME "C:\oracle\oc121\"
在某些数据库连接上,还需要设置 TNS_ADMIN:
setx TNS_ADMIN "%ORACLE HOME%\network\admin"
我在 CentOS 7 中使用 OCCI,遇到了同样的问题,只需将 libociicus.so 添加到 LD_LIBRARY_PATH 即可解决问题。
您正在ORA-01804
通过数据库接收,描述ORA-01804
是:
failure to initialize timezone information
Cause: The timezone information file was not properly read.
oracle::occi::SQLException
我在尝试连接到 oracle db 时遇到了 C++ OCCI 应用程序的问题。
ORA-01804:
failure to initialize timezone information
Cause: The timezone information file was not properly read.
原因是我的 linux oracle 客户端在其$ORACLE_HOME
目录中缺少一些与时区相关的文件。解决方案是简单地从另一个 oracle 客户端实例复制这些文件。
另一个可能的原因:二进制无权访问OCCI库...由于我错误地设置了OCCI库所在文件夹的模式,我遇到了这种情况。
就我而言,libociicus.so
(可以在Oracle Instant Client中找到)丢失了。
另一个微不足道但难以确定的原因可能是 Oracle 安装文件夹不完整。对我来说,原因是某些进程刚刚(未成功)卸载了 Oracle 客户端。
作为 PATH env 中的 bin 文件夹,这真的很棘手。var 包含 oci.dll(和许多其他 DLL-s),但在其他地方C:\oracle\11\
缺少其他文件。
所以:检查安装文件夹是否包含所有必需的文件!
我知道这是一个老问题,但是没有答案可以解决我的问题(nodejs的 oracledb 包,macOS)。
但是,我再次为自己找到了解决方案。
解决方案是libociei.dylib
移入/usr/locale/lib
文件夹。就是这样。
对我来说,这是因为我的即时客户端和数据库服务器的版本使用了不同的版本。所以我不得不匹配他们的版本来解决这个错误。显然,如果版本不同,Oracle 将无法读取数据库时区。