Как я могу установить тайм-аут на OCILogon2? - PullRequest
3 голосов
/ 13 ноября 2009

Когда базы данных Oracle 10 запущены и работают нормально, OCILogon2 () немедленно подключится. Когда базы данных отключены или недоступны из-за проблем с сетью - они сразу же выйдут из строя. Однако, когда наши администраторы баз данных обращаются в аварийное обслуживание и блокируют входящие соединения, это может занять от 5 до 10 минут. Это проблематично для меня, так как я обнаружил, что OCILogin2 не является поточно-ориентированным, и мы можем использовать его только последовательно - и я подключаюсь к довольно многим БД Oracle. 3 заблокированных сервера X 5-10 минут = от 15 до 30 минут времени блокировки

Кто-нибудь знает, как установить время ожидания соединения OCILogon2?

Спасибо.

Ответы [ 2 ]

1 голос
/ 02 декабря 2009

Мы считаем, что нашли правильную настройку файла - но это одна из тех проблем, когда нам приходится ждать, пока что-то редкое и ужасное произойдет, прежде чем мы сможем это проверить: - /

[sqlnet.ora]
SQLNET.OUTBOUND_CONNECT_TIMEOUT=60

Из документов Oracle ..

http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/sqlnet.htm#BIIFGFHI

5.2.35 SQLNET.OUTBOUND_ CONNECT _TIMEOUT

Назначение

Используйте параметр SQLNET.OUTBOUND_ CONNECT _TIMEOUT, чтобы указать время в секундах, в течение которого клиент устанавливает соединение Oracle Net с экземпляром базы данных.

Если соединение Oracle Net не установлено в указанное время, попытка соединения прекращается. Клиент получает сообщение ORA-12170: TNS: ошибка тайм-аута подключения.

Интервал времени ожидания для исходящего соединения - это расширенный интервал времени ожидания для соединения TCP, который определяет ограничение времени, необходимого для установления соединения TCP. Кроме того, интервал ожидания исходящего соединения включает время, необходимое для соединения с экземпляром Oracle, предоставляющим запрошенную услугу.

Без этого параметра запрос подключения клиента к серверу базы данных может блокироваться на время ожидания TCP-соединения по умолчанию (приблизительно 8 минут в Linux), когда хост-система сервера базы данных недоступна.

Интервал ожидания исходящего соединения применим только для транспортных соединений TCP, TCP с SSL и IPC.

По умолчанию

нет

Пример

SQLNET.OUTBOUND_ CONNECT _TIMEOUT = 10

1 голос
/ 14 ноября 2009

Я сейчас играю с OCI, и мне кажется, что это невозможно. Единственный способ, которым я могу придумать, - это использовать неблокирующий режим. В этом случае вам понадобятся OCIServerAttach () и OCISessionBegin () вместо OCILogon (). Но когда я попробовал это, OCISessionBegin () постоянно возвращает OCI_ERROR со следующим кодом ошибки:

  • Операция ORA-03123 блокирует
  • Причина: попытка не может быть завершена сейчас.
  • Действие: повторите операцию позже.

Это выглядит странно, и я пока не знаю, как с этим справиться.

Возможный обходной путь - запустить вход в другой процесс, который можно прервать по истечении времени ожидания ...

...