Perl DBD::ODBC 到 Informix DBMS

Posted

技术标签:

【中文标题】Perl DBD::ODBC 到 Informix DBMS【英文标题】:Perl DBD::ODBC to Informix DBMS 【发布时间】:2012-04-24 13:32:37 【问题描述】:

我正在尝试使用 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 的语法。我在 mysql 上使用 DBI 已经有一段时间了,但 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 身份运行连接请求。任何帮助表示赞赏。谢谢!

【问题讨论】:

【参考方案1】:

您是否阅读了 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,我很乐意接受任何更改。

【讨论】:

bohica,非常感谢您提供的信息。我发现我的 CSDK 很可能没有正确安装,所以我需要在移动到 .ini 之前纠正该部分。不能本末倒置..... 所以当你解决这个问题时,请告诉我结论,我会修改 README.informix。 嗨,bohica,会的。我现在正在网上浏览所有 IBM 文档,希望能尽快实现这一点.....

以上是关于Perl DBD::ODBC 到 Informix DBMS的主要内容,如果未能解决你的问题,请参考以下文章

通过 perl 在 sqlhosts 中的 Informix dbserver 连接

使用 perl 阻止消息在 unix 平台上的 informix 中显示

通过 ip:port 使用 Perl DBI 连接到 Informix

如何锁定 Access 数据库以防止写入

Perl 中的 Informix 错误:ISAM:107:ISAM 错误:记录被锁定。在 test_db_connectivity.pl 第 14 行

安装 DBD::Informix 模块时出错