运行 在 Informix 12 上执行时出现段错误

Getting a seg fault when running sperform on Informix 12

我是 Informix 的新手,我正在尝试 运行 使用 sperform 的屏幕,但是当我尝试查询时它只是出现段错误。到目前为止我有:

当我尝试使用表单查询时,我得到一个 "Segmentation fault (core dumped)" 并且它退出了。谁能帮我理解为什么?这不是最基本的吗?

初步回答

是;这是最基本的。不;它不应该崩溃。基本上没有任何情况会导致该序列崩溃。您可能应该向 IBM 提交错误报告。

唯一可能成为问题的是,我SQL可能是使用比服务器安装的版本更旧的 CSDK 构建的,并且可能存在意外的不兼容性。它应该有效,但偶尔会出现缺陷。如果您想探索如何证明这种可能性,请说出来。这有点繁琐,但在正式解决问题时可能会让您起床 运行ning。

扩展答案

YES! I'd love to try to fix this.

在我看来,第一步是查看我SQL (Informix SQL) 运行 在单独安装时是否正确 — 而不是与Informix 服务器代码。它应该在两种环境下都能工作,但新服务器代码可能更改了一些导致旧工具代码损坏的东西。

因此,重新安装 Informix SQL(如果需要,还可以安装其他开发工具,但您可以保存这些工具,直到获得只有 ISQL 的 POC)到一个新目录中。假设您的服务器安装在 /opt/informix;您可以在 /opt/isql 中安装您的工具。 (还不需要卸载 /opt/informix 下的工具。)

  • 将服务器 sqlhosts 文件(从 /opt/informix/etc/sqlhosts)复制到新的 /opt/isql/etc/sqlhosts
  • 改变INFORMIXDIR=/opt/isql.
  • 将新值添加到路径前面 (PATH=$INFORMIXDIR/bin:$PATH)。
  • 担心 LD_LIBRARY_PATH 的设置 — 您想选择 /opt/isql/lib 下的库,而不是 /opt/informix/lib.
  • 下的库
  • 保持INFORMIXSERVER不变;您仍然会与同一个数据库服务器通信。

您现在应该尝试(重新)生成表单文件并 运行 它。运气好的话,现在可以用了。

OK, that works! Don't know if that's a good thing or not, but we're going to try to get that change into production.

它让你前进;那挺好的。让我感到欣慰的是,工具发布的 QA 过程的基础没有崩溃。该产品在 运行 的开发环境中工作。

令人讨厌的是,后来的服务器版本改变了一些东西,使得旧版本的工具不再适用于较新的服务器。应该没问题。然而,运行 工具和服务器的单独 INFORMIXDIR 值并非闻所未闻。如果服务器在单独的机器上,隔离将是不可避免的 — 这些工具将使用与服务器使用的不同的 INFORMIXDIR(忽略 NFS 文件系统等)

Is it possible that there's some aspect to my steps that cause something to be overwritten?

没有。经典的 'Rule of TEN (Tools, Engine, Network)' — 在服务器之前安装工具(在启用网络的服务器版本之前)或多或少适用,这就是您所做的。大约 20 年前,服务器的独立网络启用版本不再相关,但引擎之前的工具('Rule of TE' 只是不削减它)通常是正确的。

由于解决方法有效,我们需要向前看一点:这对您意味着什么?

  1. 您有一个临时有效的解决方案。
  2. 您在 运行 编程时需要注意环境设置。
    • 使用这些工具(Informix 4GL、Informix SQL)的程序将 运行 具有 INFORMIXDIR=/opt/isql 和相应的环境设置。
    • 服务器安装的程序(DB-Export、DB-Import、ON-Stat 等)将 运行 具有 INFORMIXDIR=/opt/informix 和相应的环境设置。
    • 如果您愿意,可以在 /opt/isql/bin 中为您希望开发人员或用户使用的来自 /opt/informix/bin 的程序设置脚本。
    • /opt/isql/bin中的脚本将为服务器正确设置环境,然后执行服务器程序。
    • /opt/informix/bin 中的脚本将类似地为工具正确设置环境,然后执行工具程序。
    • 在每个目录中,假设您很小心,您有一个实际设置环境的脚本和 运行 另一个程序;程序名称只是(符号?)指向主脚本的链接。
    • 您有两个独立的主脚本 — 一个用于设置服务器环境,一个用于设置工具环境。
  3. 您应该将问题报告给 IBM (Informix) 技术支持。您可以概述为解决该问题必须执行的操作。事实上,您有解决方法会降低紧迫性,但理想情况下,这仍然是一个应该解决的问题。 (虽然世界并不理想,以防万一您没有注意到;交付修复程序可能需要一些时间。)