通过 perl 在 sqlhosts 中的 Informix dbserver 连接

Posted

技术标签:

【中文标题】通过 perl 在 sqlhosts 中的 Informix dbserver 连接【英文标题】:Informix dbserver connections in sqlhosts via perl 【发布时间】:2014-08-04 15:57:34 【问题描述】:

我想在 sqlhosts 中添加一个新的 Informix 服务器条目,但我不太确定它将如何影响现有连接。

目前 sqlhosts 只包含一个服务器条目...

 dbserver       onsoctcp    111.111.111.20      7101

数据库句柄是在现有的 perl 模块中创建的(db 是服务器上的数据库)...

my $dsn = "DBI:Informix:db";
my $dbh = DBI->connect($dsn,"user","password");

请注意,从未引用过“dbserver”。

我想在 sqlhosts 中添加一个测试服务器。像这样的...

 dbserver       onsoctcp    111.111.111.20      7101
 dbserver_test  onsoctcp    111.111.111.21      7101

在 sqlhosts 中只有一个条目,一切正常。但我的连接从不引用 sqlhosts 中的服务器名称。

所以,我的问题...

Informix 是否只是尝试使用唯一可用的一种?

在 sqlhosts 中添加第二个服务器条目会强制我在连接字符串中包含服务器名称吗?

谢谢!

【问题讨论】:

【参考方案1】:

Informix 客户端使用环境变量来解析主机和其他配置;检查INFORMIXDIR 是否设置为安装Informix CSDK 的路径(我假设是),并将INFORMIXSERVER 设置为指向sqlhosts 中的新条目。请参阅 IBM 知识库中的 this article。

或者,使用db@server数据源格式:

my $dbh = DBI->connect("DBI:Informix:db@server", "user", "password");

【讨论】:

宾果游戏!有时我不喜欢 ENV 变量 ;) 只是为了记录...我发现当 sqlhosts 中有两个相同的 dbsever 名称时,第一个获胜。【参考方案2】:

可能是权限问题?来自文档:

请注意,您可能还可以连接到其他数据库,而不是 由 DBI->data_sources 列出,使用其他符号来标识 数据库。例如,如果“server”,您可以连接到“dbase@server” 出现在 sqlhosts 文件中,并且数据库“dbase”存在于 服务器和服务器已启动,您有权同时使用 服务器和服务器上的数据库等等。另外,你可能不会 能够连接到列出的每一个数据库,如果你有 至少没有获得数据库的连接权限。然而, DBI->data_sources 方法列出的数据库肯定存在, 并且尝试连接到这些来源是合法的。

http://search.cpan.org/~johnl/DBD-Informix-2013.0521/Informix.pm

【讨论】:

用户/通行证的授权都已经过验证,并且使用 dbaccess 和 server studio 可以正常工作。当创建 dns 和 dbh 时没有指定一个时,Informix 及其所有怪癖会使用唯一的 sqlhosts 条目,这似乎很奇怪。

以上是关于通过 perl 在 sqlhosts 中的 Informix dbserver 连接的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Perl 中创建或测试 NaN 或无穷大?

使用 perl Archive::Zip 创建 *.epub -- epubchecker 错误

perl 中的引用

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

Perl DBD::ODBC 到 Informix DBMS

无法通过 perl 中的 socks 代理连接到主机