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
Perl 中的 Informix 错误:ISAM:107:ISAM 错误:记录被锁定。在 test_db_connectivity.pl 第 14 行