Ограничение ConnectionTimeout для базы данных Oracle - PullRequest
0 голосов
/ 10 ноября 2011

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

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

с сайта 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 секунд.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2011

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

0 голосов
/ 11 ноября 2011

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

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

...