快照启动后:Informix Client -23101 / Oracle Instant Client -28759
Posted
技术标签:
【中文标题】快照启动后:Informix Client -23101 / Oracle Instant Client -28759【英文标题】:After snapshot boot : Informix Client -23101 / Oracle instant client -28759 【发布时间】:2015-10-16 07:46:33 【问题描述】:为了不浪费您的时间,我将描述我所拥有的 && 我现在所拥有的。我的应用程序是用 php 编写的。他们住在带有 nginx + apache web 服务器的 redhat6 服务器上。我们将数据存储在 mysql DB 中,但我们有很多从 Oracle 和 IBM Informix DB 和 mssql 导入的数据。对于 Oracle 和 Informix,我已经安装了客户端和编译库 pdo_oci.so 和 pdo_informix.so 。几个月来,他们按预期工作。
但一周前,管理员制作了虚拟服务器的快照,然后重新加载了它。现在只有 MySQL 和 mssql 连接器可以工作,Oracle 和 IBM 客户端会报错。
甲骨文:-28759
Failed : SQLSTATE[HY000]: pdo_oci_handle_factory: ORA-28759: failure to open file (/usr/local/src/php-5.3.3/ext/pdo_oci/oci_driver.c:579)/opt/project/www/test.php149
IBM Informix:-23101
Failed : SQLSTATE=HY000, SQLDriverConnect: -23101 [Informix][Informix ODBC Driver][Informix]Unspecified System Error = -23101./opt/project/www/test.php146
好吧,正如官方文档所说,Informix 错误与 DB_LOACALE 和 CLIENT_LOCALE...等丢失的环境变量有关。
这很奇怪,因为一直以来我都在使用这个字符串进行连接:
$dbh = new PDO ("informix:host=example.ru; database=some_db; server=db_net; CursorBehavior=0; DB_LOCALE=en_US.57372; CLIENT_LOCALE=en_US.57372;", "db_login", "pass");
我尝试为 apache (httpd) 设置此环境变量,但此错误仍然存在。现在我在服务器重启后设置了这个变量,但没有成功。可能是我做错了什么或在错误的地方或用户名...
关于 Oracle ,文档说它与文件加载有关:
而且web doc说它主要是ssl错误并且与客户端的故障有关,即找不到SSL Wallet文件。我有通过钱包到 Oracle DB 的 TCPS 安全连接,我记得让 Instant 客户端查看正确的位置是一个真正的麻烦。不仅如此,我还启用了客户端跟踪,但只有当我直接从终端使用 sqlplus 时它才会写入日志。当我运行我的 php 脚本时,我只收到错误,没有日志。
问题:
如何正确启用 Informix 变量,或如何解决此问题 以不同的方式发行。
如何为 oracle 启用“网络跟踪”,以 看看他在找什么?
如何存储这些变量以备将来使用 重新启动/重新加载/快照...等。 ?【问题讨论】:
仍然没有评论... =( 【参考方案1】:这可能与文件/目录权限而不是环境变量有关。 oracle 错误似乎表明它无法再打开/读取所需的文件。
informix -23101 错误也可能是由于驱动程序无法读取语言环境支持所需的 GLS 文件造成的。
apache 用户是否有权访问 Informix Client SDK 目录和文件?
【讨论】:
好吧。为了解决这个问题,我搜索了如何获得最有价值的信息:系统在做什么。我找到了有关 strace 命令的信息。 我用它创建了一个日志,发现了很多。现在我的 Oracle 问题解决了。也许不是最好的方法,但仍然。问题与针对不同用户的 php 的不同配置有关。 root 正在搜索钱包文件,因为它是在 /root/.sqlnet.ora 中编写的,但是 apache 用户下的 php 在默认路径 etc/apache/... 中搜索它。问题与阅读证书文件有关。现在 Oracle 连接正在工作。 Informix 仍然无法正常工作。 Informix 的问题与用户权限无关。如果我在 /usr/local/src/php-5.3.3/sapi/cli/php 下调用测试,则测试失败。sudo -u root strace -o /tmp/web_informix.log /usr/local/src/php-5.3.3/sapi/cli/php /opt/project/www/test_console.php
但是如果 /usr/local/bin/php или /usr/bin/php 则连接成功。 strace -o /tmp/web_debug.log /usr/bin/php /opt/project/www/test_console.php
在日志中直到日志结束都没有错误。如果有人可以提供帮助,我可以提供两个连接成功和失败的文件。
检查了“gls”的日志,发现成功连接的字符串如下:open("/opt/IBM/informix/gls/lc11/en_us/e01c.lco", O_RDONLY) = 5 fstat(5, st_mode=S_IFREG|0644, st_size=83981, ...) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8d878a1000 read(5, "FILE_TYPE=locale_object\nCOMPILER"..., 4096) = 4096
而失败日志:open("/usr/informix/gls/lc11/en_us/e01c.lco", O_RDONLY) = -1 ENOENT (No such file or directory)
驱动程序正在搜索文件“e01c.lco”。在成功的情况下,它会在 /opt/IBM/informix/gls/lc11/en_us/e01c.lco
中搜索,而在尝试在 /usr/informix/gls/lc11/en_us/e01c.lco
中搜索时会失败。 GLS软件的实际安装目录是什么?【参考方案2】:
人。 启用所有可能的跟踪并使用“strace”命令检查程序失败的地方!!!
感谢 Luís Marques! 我在我的日志中找到了 gls 并尝试为它建立链接.. 到真正的 IBM/informix/gls...而不是另一个 msg 问题导致.../我从 /usr/informix 到我的真实 /opt/IBM/informix 建立了软链接,所有连接都成功唤醒!
谢谢你。你真的帮我解决了这个麻烦。我将其发布为 ansver,但将接受您的作为感谢您! =)
【讨论】:
很高兴我能帮上忙。这可能是由于环境变量$INFORMIXDIR
设置为不同的位置造成的。可能是 Web 服务器/php 的配置文件之一中的内容。
$INFORMIXDIR 变量已设置,并且指向 /opt/IBM/informix 目录,但我想 apache 看不到它..以上是关于快照启动后:Informix Client -23101 / Oracle Instant Client -28759的主要内容,如果未能解决你的问题,请参考以下文章
跟踪 Informix Client for Linux 的 ODBC 调用