我正在用C ++编写CGI程序。它应该在Apache HTTP Server的2.2版本上运行,并且需要连接到Oracle Database 10g。
我尝试在没有httpd的情况下运行这个CGI程序,它可以成功连接到Oracle数据库,但是一旦我通过httpd服务器运行它,它在error_log
中写了以下消息。
尝试检索错误ORA-12546的文本时出错
我该如何解决这个问题?
答案 0 :(得分:0)
这通常意味着您遇到了ORA-12546错误,但您的客户端库没有安装实际的错误消息。这不是问题,您可以搜索错误号here。在你的情况下,它是“TNS:权限被拒绝”。
您的CGI用户是否有权访问tnsnames.ora?
答案 1 :(得分:0)
只是一个猜测,但这类事情的一个常见原因是没有为您的CGI程序设置ORACLE_HOME环境。 Apache通常在启动时启动,因此跳过所有/ etc / profile类型的东西。
您需要确保设置ORACLE_HOME
,并且根据您的系统设置,您可能还需要更新LD_LIBRARY_PATH
以包含$ORACLE_HOME/lib
。您需要程序来设置环境,或者在apache配置中使用SetEnv
指令。看看这是否是问题的投注方式就是编写一个转储所有环境变量的测试CGI。
现在如果CGI在mod_perl
下运行它有点棘手,因为mod_perl往往对环境安全非常肛门。认为我们最终使用Perl * Something * Require指令在perl中设置它。很抱歉因为含糊不清,就在几年前......