Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Perl - DBI:Sybase+MS SQL  (Прочитано 2376 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн BorisPlus

  • Автор темы
  • Активист
  • *
  • Сообщений: 253
  • Болты вперед,болты назад,такой работе я очень рад!
    • Просмотр профиля
Perl - DBI:Sybase+MS SQL
« : 01 Декабря 2009, 14:17:22 »


Есть плагин к Нагиосу, использующий скрипт вроде как на Perl - check_mssql_health .


$self->{dsn} = "DBI:Sybase:";

if ($self->{hostname}) {

  $self->{dsn} .= sprintf ";host=%s", $self->{hostname};

  $self->{dsn} .= sprintf ";port=%s", $self->{port};

} else {

  $self->{dsn} .= sprintf ";server=%s", $self->{server};

}

...

printf "Try connect  %s %s %s\n",$self->{dsn},$self->{username},$self->{password};

alarm($self->{timeout} - 1); # 1 second before the global unknown timeout

if ($self->{handle} = DBI->connect(

  $self->{dsn},

  $self->{username},

  $self->{password},

  { RaiseError => 1, AutoCommit => 0, PrintError => 1 })) {

$retval = $self;

printf "WOW! %s\n",$self;

} else {

# doesnt seem to work $self->{errstr} = DBI::errstr();

printf "WOW! connect failed  %s\n",DBI::errstr();

$self->{errstr} = printf "WOW! connect failed  %s\n",DBI::errstr();

return undef;

}


Есть машина c MS SQL - в домене MYDOMAIN ее имя sqlworking - ip 192.168.1.2

Есть пользователь в домене Admin без пароля

Есть пользователь в SQL nagios/nagios

Пробовал запускать скрипт из консоли, почитал на форумах и блогах, выяснилось, что не хватает доп библиотек.

Ставил через Synaptic или компилировал. Вот вроде то, что уствновилось в итоге


freedts-dev

freedts-common

libdbi-perl

libdbi0

libdb-sybase-perl


Прописал в /etc/freetds.conf


[global]

tds version = 8.0


Но все равно скрипт не соединяется с базой

я и так Try connect DBI:Sybase:;host=192.168.1.2;port=1433 nagios nagios
и эдак Try connect DBI:Sybase:;server=sqlworking nagios nagios
Потом заметил, что возможна ошибка в синтаксисе dsn и переделал


if ($self->{hostname}) {

  $self->{dsn} .= sprintf "host=%s", $self->{hostname};

  $self->{dsn} .= sprintf ":%s", $self->{port};

} else {

  $self->{dsn} .= sprintf "server=%s", $self->{server};

}


и эдак Try connect DBI:Sybase:host=192.168.1.2:1433 nagios nagios
и эдак Try connect DBI:Sybase:server=sqlworking nagios nagios
Попробовал


$self->{dsn} .= sprintf "server=%s:%s", $self->{server}, $self->{port};


и Try connect DBI:Sybase:server=sqlworking:1433 nagios nagios

$self->{dsn} .= sprintf "server=%s;port=%s", $self->{server}, $self->{port};


и Try connect DBI:Sybase:server=sqlworking;port=1433 nagios nagios
никакого результата.



Через доменное имя пользователя скрипт вообще не пускает в моем случае, поскольку должен быть указан скрипту пароль, а у меня в домене нет пароля (и это поменять нельзя)

И еще, что странно, так это то, что ниодна строка printf "WOW!..." ни из if, ни из else не "отрабатывает". Видимо возникает исключение неотлавливаемое.



В чем проблема? Самой машине с Ubuntu я просто выделил IP и каких-то действий по вводу ее в домен не производил. Но компы в сети пингуются, да и Нагиос пашет на отлично.



Еще я немного не понимаю, зачем делать что-то с MS SQL, как это сказано в руководстве по check_mssql_health.


Спасибо за помощь, товарищи!

 

Страница сгенерирована за 0.017 секунд. Запросов: 22.