2012-02-17 22 views
1

DBIDBD::Informix)を使用して、IPアドレスとポート番号のみを指定してInformixに接続しようとしています。この文脈では、正確なマシン上のSQLホストファイルに依存することはできません。私ができることは可能ですか?Perl DBIを使用してInformixに接続する場合:

DBI->connect("dbi:Informix://10.1.23.232:2232/eris", $user, $pass); 

が、以下のエラーを受け取りました:

接続への正しいアプローチは何

DBI connect('//10.1.23.232:2232/eris','someuser',...) failed: SQL: -1804: Invalid database environment. at tools/check_informix.pl line 63

彼らはので、私はこれを試して与えた//machine1/dbaseの形で接続文字列を言及ドキュメントで

ポートとIPアドレスだけを知っているInformixサーバーに接続しますか?

答えて

0

//machine/dbaseを使用する表記法は、主にInformix Standard Engine、SEで使用するための表記です(そして、:port表記も認識されないと思いますが、どのポートが使用されているかを調べる必要があります) 1525または1526)。 AFAIK、Informix Dynamic Server、IDSでは動作しません。その後、

myremoteserver olsoctcp 10.1.23.232 2232 

う:あなたのような、機械(生のI/PアドレスOK)とポート(RAWポート番号OK)を指定し、サーバ名、のためのsqlhostsファイルにエントリを作成する必要があります

[email protected] 

任意のファイルをINFORMIXSQLHOSTS変数を持つsqlhostsファイルとして指定できます。 sqlhostsファイルで指定するサーバー名は、ポート2232で待機しているI/Pアドレス10.1.23.232のホスト上の実際のサーバー名と一致する必要があります。

+0

ありがとう!私はサーバー名を受け入れる必要性に服従する。一時的なホストファイル(File :: Tempを使用)を作成し、それを指すようにINFORMIXSQLHOSTSを変更します。環境変数の操作やファイルシステムへの書き込みを避ける方法はありますか? – user1216871

0

はDBD :: Informixのドキュメントを見て、あなたのアプローチは、DBDのためのポッド以外OKに見える:: Informixのは、ちょうど// machine1に/ dBASEの言うとポートを言及していません。あなたの環境でINFORMIXDIRを設定するのを忘れたのかもしれません。 CONNECTING TO A DATABASEを参照してください。

+0

INFORMIXDIRが設定されていない場合は、別のエラーメッセージを取得し、DBD :: Informixのは、コンパイル時に$ INFORMIXDIRの設定を記録し、実行時に環境変数が設定されていない場合は、その使用しています。 –

0

Jonathan Lefflerが説明したように、サーバー名サーバー名)は避けられません。必要な情報があれば、独自のsqlhostsファイルを生成して使用する概念実証スクリプトがあります。

#!/usr/bin/env perl 

use strict; 
use warnings; 

use 5.10.0; 

# core 
use File::Temp qw(tempfile); 

# CPAN 
use DBI; 

die "Usage: $0 host port server database user password\n" if (@ARGV != 6); 
my ($host, $port, $server, $database, $user, $password) = @ARGV; 

my ($handle, $path) = tempfile("sqlhosts_$server\_XXXXX"); 

print $handle "$server onsoctcp $host $port\n"; 

close($handle); 

my $sqlhosts = File::Spec->rel2abs($path); 

$ENV{'INFORMIXSQLHOSTS'} = $sqlhosts; 
$ENV{'INFORMIXSERVER'} = $server; 

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

say 'Yay! It worked!'; 

$dbh->disconnect(); 

unlink $sqlhosts; 
関連する問題