Ограничение времени ожидания соединения для базы данных Oracle

Как ограничить время ожидания для подключения к базе данных Oracle? Я использую devart dotConnect Express Edition на уровне доступа к данным. Я попытался добавить Connection timeout=30; в строку подключения, но это не дало правильного результата (даже немного странно, в первый раз он действительно ограничивается 30 секундами, но не при всех попытках подключения). Потом я узнаю, что

Connection Timeout Время ожидания (в секундах) при попытке установить соединение, после чего попытка прерывается и возникает ошибка. Значение 0 указывает на отсутствие ограничений. Значение по умолчанию — 15 секунд. Доступно только в прямом режиме.

с сайта Devart

Я не могу использовать прямой режим, потому что использую Express Edition. Затем я попытался установить эти параметры в TNSNAMES.ORA

DB1 =
  (DESCRIPTION =
    (CONNECT_TIMEOUT=11)
    (TRANSPORT_CONNECT_TIMEOUT=10)
    (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.100.8)(PORT = 1521)
       )
    )
    (CONNECT_DATA =
       (SERVICE_NAME = DB1)
    )
  )

Все равно работает некорректно. ОК, спускаемся вниз и пытаемся установить время ожидания соединения в SQLNET.ORA

SQLNET.INBOUND_CONNECT_TIMEOUT = 5

Еще один провал! Кто-нибудь знает, как установить время ожидания, ограничивающее время подключения к DB1? Теперь он завершает соединение (сбой соединения) примерно на 20 секунд.


person kseen    schedule 10.11.2011    source источник
comment
Это может помочь dbaforums.org/oracle/index.php?showtopic=11745   -  person V4Vendetta    schedule 10.11.2011
comment
Я думаю, что его также рекомендует Oracle вы также добавляете INBOUND_CONNECT_TIMEOUT_*listener_name* (со значением меньше INBOUND_CONNECT_TIMEOUT)   -  person V4Vendetta    schedule 10.11.2011


Ответы (2)


Я никогда не использовал библиотеку dotConnect от Devart, но, глядя на OracleConnection кажется, что вы должны иметь возможность закрыть соединение через определенный период времени, вызвав OracleConnection.Close(). Это должно вывести вас из состояния блокировки, пока вы пытаетесь Open установить соединение.

Это не совсем то же самое, что установка тайм-аута, но может сработать. Кроме того, проверьте ConnectionTimeout при отладке этого кода, чтобы убедиться, что тайм-аут установлен правильно.

person Kiril    schedule 10.11.2011

OracleConnection.ConnectionTimeout работает только в прямом режиме. Игнорируется, когда соединение устанавливается через клиент Oracle, который в этом случае управляет соединением.

person Devart    schedule 11.11.2011