powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Informix [игнор отключен] [закрыт для гостей] / Установка таймаута на коннект к базе через ODBC
12 сообщений из 12, страница 1 из 1
Установка таймаута на коннект к базе через ODBC
    #36617221
KyRo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

Подскажите как установить таймаут на коннект к серверу через ODBC . Пробовал поставить параметры в утилите Setnet32 (CONTIME,CONRETRY) но от чего то они не
действуют .
Подскажите как еще можно установить данный таймаут.

Так же вопрос , есть ли возможность в Informix выставить продолжительность жизни сесии запущенной от конкретного пользователя ?
...
Рейтинг: 0 / 0
Установка таймаута на коннект к базе через ODBC
    #36617245
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KyRoПодскажите как установить таймаут на коннект к серверу через ODBC .
Обычно начинают с описания проблемы, тогда и вопрос будет более понятен (и ответ может быть другой, чем вы ожидаете).
В данном случае, скажите по русски, что вам нужно ? Т.е. что конкретно (какой временной промежуток) вы хотите урегулировать/установить и для чего?
...
Рейтинг: 0 / 0
Установка таймаута на коннект к базе через ODBC
    #36617267
KyRo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если подробно , то есть Web интерфейс запущенный на iis , который при запросе от пользователя , через ODBC конектится к Informix 9.4.

В последнее время появилась необходимость в установке таймаута на соединение с базой данных, что бы в случае превышения которого (не важно отработал запрос или нет), одбс отвечал бы ошибкой и соответственно iis так же.

Подскажите как это можно сделать на уровне odbc или на уровне Informix.

Установить таймаут на уровне iis не возможно в виду того что он используется и для других задач , которые будут превышать таймаут.
...
Рейтинг: 0 / 0
Установка таймаута на коннект к базе через ODBC
    #36617459
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KyRoВ последнее время появилась необходимость в установке таймаута на соединение с базой данных, что бы в случае превышения которого (не важно отработал запрос или нет), одбс отвечал бы ошибкой и соответственно iis так же.
Я же не зря просил ответить "по русски", т.е. без употребления иностранных слов, типа timeout :)
Обычно timeout это истечение времени ожидания какого-то события, т.е. время простоя.
Два предположения, выберите нужное:
1. Ваше приложение нормально коннектится к серверу, отрабатывает запрос (или долго выполняет его) и ждет, не разрывая коннекта, следующего запроса и вам нужно, после истечения некоторого времени ожидания, разорвать соединение с сервером ?
2. Приложение пытается подсоединиться к серверу, но иногда присходит это долго и вам столько ждать нельзя - надо через определенный промежуток сразу отрубить саму попытку коннекта ?

Для чего это нужно ?
Варианты:
- уменьшить число коннектов к серверу из-за лицензионных ограничений
- уменьшить число потребляемых ресурсов на сервере
- "веб-интерфейс" на IIS не может обработать большое кол-во запросов
- ....
...
Рейтинг: 0 / 0
Установка таймаута на коннект к базе через ODBC
    #36617479
KyRo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я Вас по правде до понял .

Интересует первый написанный Вами вариант.

Нужно это, для того что, на сервере который генерирует данные запросы к IIS скапливается очередь, из за долгой отработки запросов и это приводит к определенным проблемам.
Соответственно мы хотим сделать так , что бы каждый запрос к Informix выполнялся не более например 10 секунд, не зависимо от результата его выполнения .
...
Рейтинг: 0 / 0
Установка таймаута на коннект к базе через ODBC
    #36617493
KyRo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы можете правильно подметить , что проблему надо решать на уровне источника запросов , который не совсем корректно работает с их очередью - над этим так же работают и в данный момент мы пытаемся минимизировать проблему .
...
Рейтинг: 0 / 0
Установка таймаута на коннект к базе через ODBC
    #36617737
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KyRo,

что у вас aps, asp.net, php? Там таймауты устанавливаются.
...
Рейтинг: 0 / 0
Установка таймаута на коннект к базе через ODBC
    #36617768
KyRo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев ДенисKyRo,

что у вас aps, asp.net, php? Там таймауты устанавливаются.

asp.net
...
Рейтинг: 0 / 0
Установка таймаута на коннект к базе через ODBC
    #36617856
victor16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Руководство администратора Informix 11.50xC6
The following example is a stored procedure that terminates user sessions that are idle for longer than a value set by a threshold, and then adds an alert to the ph_alert table.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
/*
**************************************************************
* Create a function that will find all users that have
* been idle for the specified time. Call the SQL admin API to
* terminate those users. Create an alert to track which
* users have been terminated.
**************************************************************
*/
CREATE FUNCTION idle_timeout( task_id INT, task_seq INT)
RETURNING INTEGER
DEFINE time_allowed INTEGER;
DEFINE sys_hostname CHAR( 16 );
DEFINE sys_username CHAR( 257 );
DEFINE sys_sid INTEGER;
DEFINE rc INTEGER;
{*** Get the maximum amount of time to be idle ***}
SELECT value::integer
INTO time_allowed
FROM ph_threshold
WHERE name = "IDLE TIMEOUT";
{*** Find all users who are idle longer than the threshold ***}
FOREACH SELECT admin("onmode","z",A.sid), A.username, A.sid, hostname
INTO rc, sys_username, sys_sid, sys_hostname
FROM sysmaster:sysrstcb A , sysmaster:systcblst B,
sysmaster:sysscblst C
 28 - 10  IBM Informix Dynamic Server Administrator’s Guide
WHERE A.tid = B.tid
AND C.sid = A.sid
AND lower(name) in ("sqlexec")
AND CURRENT - DBINFO("utc_to_datetime",last_run_time) > time_allowed UNITS MINUTE
AND lower(A.username) NOT IN( "informix", "root")
{*** If a user is successfully terminated, log ***}
{*** the information into the alert table. ***}
IF rc >  0  THEN
INSERT INTO ph_alert
(
ID, alert_task_id,alert_task_seq,
alert_type, alert_color,
alert_state,
alert_object_type, alert_object_name,
alert_message,
alert_action
) VALUES (
 0 ,task_id, task_seq,
"INFO", "GREEN",
"ADDRESSED",
"USER","TIMEOUT",
"User "||TRIM(sys_username)||"@"||TRIM(sys_hostname)||
" sid("||sys_sid||")"||
" terminated due to idle timeout.",
NULL
);
END IF
END FOREACH;
RETURN  0 ;
END FUNCTION;

С уважением
Виктор
...
Рейтинг: 0 / 0
Установка таймаута на коннект к базе через ODBC
    #36617865
victor16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пардон, поторопился с копи-пастом.
Строку в вышеприведенном примере
Код: plaintext
 28 - 10  IBM Informix Dynamic Server Administrator’s Guide
считать недействительной :)
...
Рейтинг: 0 / 0
Установка таймаута на коннект к базе через ODBC
    #36681721
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KyRo
asp.net
тогда не понимаю в чем затруднение:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
using System;
using System.Data.Odbc;

public class HelloIBM
{
  public static void Main()
  {
   try
    {
      OdbcConnection odbcConn = new OdbcConnection(@"DRIVER={IBM INFORMIX ODBC DRIVER};UID=informix;PWD=informix;DATABASE=test;HOST=localhost;SERVER=ol_svr;;SERVICE=1526;PROTOCOL=onsoctcp;CLIENT_LOCALE=ru_RU.1251;DB_LOCALE=ru_RU.1251;");
      odbcConn.ConnectionTimeout = 1;
      odbcConn.Open();
      OdbcCommand Cmd = new OdbcCommand("set lock mode to wait 600", odbcConn);
      Cmd.CommandTimeout = 1;
      Cmd.ExecuteNonQuery();
      Cmd.CommandText = @"begin work";
      Cmd.ExecuteNonQuery();
      Cmd.CommandText = @"lock table te in exclusive mode";
      Cmd.ExecuteNonQuery();
    }
   catch (Exception e)
    {
      Console.WriteLine("{0} Exception caught.", e);
    }
  }
}

блокирую в другой сессии lock table te in exclusive mode

Код: plaintext
1.
2.
3.
>test1.exe
через секунду
System.Data.Odbc.OdbcException: ERROR [HYT00] [Informix][Informix ODBC Driver]Timeout expired.

а вот указываю неверный порт SERVICE=3333 не срабатывает ConnectionTimeout = 1; видимо индусы не допилили.
...
Рейтинг: 0 / 0
Установка таймаута на коннект к базе через ODBC
    #36681740
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забавно что айбиэмовые индусы (IBM.Data.Informix) считают что ConnectionTimeout это ReadOnly Property

и предлагают

Код: plaintext
1.
   IfxConnection conn = new IfxConnection("Database=SAMPLE;Connect Timeout=30");
но толку ноль от этого.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Установка таймаута на коннект к базе через ODBC
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]