The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Perl: Oracle connect timeout"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"Perl: Oracle connect timeout"  
Сообщение от jr email(ok) on 13-Мрт-06, 15:08 
Если хост с базой данных Oracle недоступен, то DBD perl очень долго ждет, пытаясь получить ответ на запрос соединения (несколько минут). В драйвере perl я не нашел, как выставить таймаут на соединение. Решил сделать это при помощи eval и alarm:

eval {
   local $SIG{ALRM} = sub { die "timeout" };
   alarm 10;
   $dbh = DBI->connect ( "dbi:Oracle:host=$db_host;sid=$db_base;port=$db_port",
               $db_user, $db_password,
               {PrintError=>1} );
};

if ( $@ ) {
   die "Exit due to timeout";
}

Но все-равно после 10 секунд процесс остается висеть, пока функция DBI->connect не возвратит результат, что она не может подключиться...
Что можно сделать?

Система: Linux altmaster 2.4.31

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Perl: Oracle connect timeout"  
Сообщение от jr email(ok) on 14-Мрт-06, 09:40 
up
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "Perl: Oracle connect timeout"  
Сообщение от Skif (??) on 14-Мрт-06, 12:33 

>eval {
>   local $SIG{ALRM} = sub { die "timeout" };
>   alarm 10;
>   $dbh = DBI->connect ( "dbi:Oracle:host=$db_host;sid=$db_base;port=$db_port",
>            
>   $db_user, $db_password,
>               {PrintError=>1} );
>};
>
>if ( $@ ) {
>   die "Exit due to timeout";
>}
>
>Но все-равно после 10 секунд процесс остается висеть, пока функция DBI->connect не возвратит результат, что она не может подключиться...
>Что можно сделать?
>
>Система: Linux altmaster 2.4.31
Для начала:

my $dbh = DBI->connect("dbi:Oracle:$dbname", $dbuser, $dbpass) || die "Unale to connect to $dbname: $DBI::errstr\n";

что бы четко определиться с ошибкой

Второе - а сервер действительно "слушает" или как? тобишь база живая?

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "Perl: Oracle connect timeout"  
Сообщение от jr email(ok) on 14-Мрт-06, 15:19 
>Для начала:
>
>my $dbh = DBI->connect("dbi:Oracle:$dbname", $dbuser, $dbpass) || die "Unale to connect to $dbname: $DBI::errstr\n";
>
>что бы четко определиться с ошибкой
>
>Второе - а сервер действительно "слушает" или как? тобишь база живая?

У меня вопрос не по ошибкам и не по существованию той или иной базы! Когда сервер доступен, то все нормально работает и ошибки, если они есть, я все вижу. Мне интересен вариант когда сервера по адресу $db_host вообще нет. В этом случае очень большое время между стартом инициализации сессии и выводом ошибки, что сервер недоступен. Мне нужно именно уменьшить connection timeout.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "Perl: Oracle connect timeout"  
Сообщение от Skif (ok) on 14-Мрт-06, 19:09 
>У меня вопрос не по ошибкам и не по существованию той или
>иной базы! Когда сервер доступен, то все нормально работает и ошибки,
>если они есть, я все вижу. Мне интересен вариант когда сервера
>по адресу $db_host вообще нет. В этом случае очень большое время
>между стартом инициализации сессии и выводом ошибки, что сервер недоступен. Мне
>нужно именно уменьшить connection timeout.


Может разумнее просто слать пакеты, а-ля сканирования на коннект SYN и ждать ответа от порта? или просто функцией connect, но не через DBI, а на прямую. Если ответ получен от порта, то ок, нет, то в дауне.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

5. "Perl: Oracle connect timeout"  
Сообщение от jr email(ok) on 15-Мрт-06, 11:19 
>Может разумнее просто слать пакеты, а-ля сканирования на коннект SYN и ждать
>ответа от порта? или просто функцией connect, но не через DBI,
>а на прямую. Если ответ получен от порта, то ок, нет,
>то в дауне.

Лишние модули прикручивать к системе (для посыла TCP SYN) не хотелось бы.
Вот в MySQL драйвере есть параметр mysql_connect_timeout, а в драйвере Oracle на удивление подобной опции нет... Может я искал плохо?

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру