Подключение к Informix с Perl DBI по ip: порту - PullRequest
1 голос
/ 17 февраля 2012

Я пытаюсь использовать DBIDBD::Informix) для подключения к Informix, используя только IP-адрес и номер порта. В этом контексте я не могу зависеть от файла sql hosts на компьютере, который является точным. Возможно ли то, что я делаю?

В документации упоминаются строки подключения в виде //machine1/dbase, поэтому я попробовал:

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

но получил следующую ошибку:

DBI connect ('// 10.1.23.232:2232/eris', 'someuser', ...) завершился ошибкой: SQL: -1804: недопустимая среда базы данных. в tools / check_informix.pl строка 63

Как правильно подключиться к серверу Informix, зная только порт и IP-адрес?

Ответы [ 3 ]

0 голосов
/ 21 февраля 2012

Нотация, использующая //machine/dbase, в основном предназначена для использования с Informix Standard Engine, SE (и я считаю, что нотация :port не будет распознана даже тогда; мне нужно изучить, чтобы выяснить, какой порт используется, но это скорее 1525 или 1526). AFAIK, он не работает с Informix Dynamic Server, IDS. Необходимо создать запись в файле sqlhosts для имени сервера, в котором указывается машина (необработанный адрес ввода-вывода в порядке) и порт (необработанный номер порта в порядке), например:

myremoteserver   olsoctcp   10.1.23.232   2232

Затем вы должны указать строку подключения как:

eris@myremoteserver

Вы можете указать любой файл как файл sqlhosts с переменной INFORMIXSQLHOSTS. Имя сервера, указанное в файле sqlhosts, должно совпадать с реальным именем сервера на хосте с адресом I / P 10.1.23.232, который прослушивает порт 2232.

0 голосов
/ 28 февраля 2012

Как описал Джонатан Леффлер, знание имени сервера (и НАСТОЯЩЕГО имени сервера) неизбежно.Вот сценарий проверки концепции, который генерирует и использует собственный файл 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;
0 голосов
/ 20 февраля 2012

Глядя на документы для DBD :: Informix, ваш подход выглядит нормально, за исключением модуля для DBD :: Informix, который просто говорит // machine1 / dbase и не упоминает порт.Возможно, вы забыли установить INFORMIXDIR в вашей среде.См. ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ .

...