2

我正在尝试使用 DBD::ODBC 在 Perl 脚本 (v5.12.4) 中建立与 Informix DB 的 ODBC 连接。我已经阅读了很多文档,似乎碰壁了,希望能在这里得到一些提示。

我安装了带有空 odbcinst.ini 和 odbc.ini 文件的 unixODBC 2.2.14(不好,我知道)。我还从 IBM 的站点下载了 Informix 的 CSDK。如果我检查 DBI 的可用驱动程序,那里也列出了 Informix。

我想我的问题与使用驱动程序和 dsn 的正确信息填充 .ini 文件有关。我不确定 Informix 驱动程序在哪里,我如何引用它们或 dsn 的语法。我已经将 DBI 与 mysql 一起使用了一段时间,但 ODBC 似乎更深入,现在有点过头了。

当我尝试运行脚本进行连接时,我得到:

DBI connect........failed: [unixODBC][Driver Manager]Data source name not found, and no default driver specified (SQL-IM002) at Informix.pl line 20

如果我在帖子中遗漏了任何重要的细节,请告诉我,我会包括在内。

谢谢!

更新

我在另一篇文章中得到了一些帮助,发现 Java 和我的操作系统运行不佳,因此我无法正确安装 CSDK。所以,我删除了 Ubuntu 并安装了 SuSE。我(我希望)现在正确安装了 CSDK 并更新了 .ini 文件。附带说明一下,我无法运行 nm 来查看符号,但我确实在 /opt/IBM/informix/lib/ 目录中有几个 .so 文件,我试图在我的 odbcinst.ini 文件中引用这些文件。当我运行 isql 连接时,我得到:

[01000][unixODBC][Driver Manager]Can't open lib '/opt/IBM/informix/lib/nameofdriver.so.   : file not found

你对这个有什么建议吗?我已经检查了文件中的恶意空格/字符,并且正在以 root 身份运行连接请求。任何帮助表示赞赏。谢谢!

4

1 回答 1

2

您是否阅读了 DBD::ODBC 中包含的 README.informix?我知道它已经很老了,但它至少给了你一个线索,你通常将 INFORMIXDIR 设置为 CSDK 的解包位置,并且客户端库位于/位于 $INFORMIXDIR/lib/cli 中。

您需要找到哪个共享对象是 Informix ODBC 驱动程序,因此请在 SDK 中查找以 .so 结尾的文件,如果这仍然让您无法猜测,请尝试在它们上运行 nm 并查找诸如 SQLAllochandle 之类的符号(所有 ODBC 驱动程序都需要这些符号) )。找到驱动程序后,您需要创建可使用“odbcinst -j”定位的 ini 文件。在您的 odbcinst.ini 文件中添加如下内容:

[informix]
Description=Informix ODBC driver
Driver=/path/to/informix_odbc_driver_shared_object
DontDLClose=1

然后,您需要在 odbc.ini 中创建一个 DSN,如下所示:

[mydsn]
Driver = informix
Database=myDataBase;
Host=192.168.10.10;
Server=db_engine_tcp;
Service=1492;
Protocol=onsoctcp;

我从一个连接字符串站点偷了那些,所以你应该用你的 informix 文档检查它们。

然后你可以使用:

isql -v mydsn myusername mypassword

测试连接。

一旦 README.informix 开始工作,我很乐意接受它的任何更改。

于 2012-04-24T14:06:32.613 回答