Ошибка при подключении к Sybase DB - PullRequest
2 голосов
/ 20 декабря 2011

У меня есть скрипт perl, который подключается к серверу Sybase db (псевдоним для сервера - MYDATABASESERVER).Мой код:

exec perl -w -x
#!perl

use Sybase::DBlib;
use Mail::Sendmail;
use Env qw(DSQUERY DBNAME DBUSER DBPASSWD);

$dbh = &execRemoteSQL($sql_text);

sub execRemoteSQL
{
my ($sqlText) = @_;
my ( $ret, $retS );
local ($dbh) = undef;


$dbh = new Sybase::DBlib $DBUSER, $DBPASSWD, $DSQUERY;
if ( !(defined $dbh) )
{
    print STDERR "execRemoteSQL(): Failed To Create DB Handle for :\n";
            print STDERR " SERVER    = $DSQUERY\n";
            print STDERR " DATABSE   = $DBNAME\n";
    exit(-1);
}
.
.
.

Когда я предоставляю имя сервера как MYDATABASESERVER (значение DSQUERY), я получаю сообщение об ошибке в операторе If, но он правильно подключается к серверу с именем как MYDB.

Хотелось бы узнать, есть ли какие-либо ограничения на длину имени сервера или это связано с чем-то другим.

Вот сообщение об ошибке, которое я получаю:

DB-Library error:
        Unknown host machine name.
execRemoteSQL(): Failed To Create DB Handle for :
 SERVER    = MYDATABASESERVER
 DATABSE   = my_db

Псевдоним сервера определен правильно, потому что я могу подключиться к БД с помощью isql.

Ответы [ 2 ]

1 голос
/ 21 декабря 2011

Я не думаю, что длина имени сервера здесь слишком велика.

Каково ваше точное сообщение об ошибке?

Возможно, псевдоним сервера MYDATABASESERVER не определен должным образом в специфичном для Sybase файле конфигурации "interfaces". Он находится в директории $ SYBASE / $ SYBASE_OCS. Что это говорит о MYDATABASESERVER (должно быть 2 строки)?

В любом случае: Не используйте DBLib, он действительно старый и устарел. Я думаю, что сопровождающий модулей Sybperl / DBLib и DBD :: Sybase по-прежнему поддерживает только код Sybase :: DBLib, чтобы упростить жизнь клиентским программистам, имеющим дело со старыми программами, и обеспечить совместимость устаревших приложений с новыми выпусками Sybase ASE.

Вместо этого вы должны использовать DBI и DBD :: Sybase. 99% всего кода perl / sybase в Интернете использует DBI.

0 голосов
/ 20 декабря 2011

Можете ли вы попробовать следующий синтаксис вместо этого?:

$dbh = Sybase::DBlib->new( $DBUSER, $DBPASSWD, $DSQUERY );
...