У меня есть сценарий, когда длительные сеансы простояTOADSoftКлиентское соединение с сервером Oracle, по-видимому, прерывается из-за тайм-аута на промежуточном брандмауэре с полным состоянием.
Эти сеансы могут простаивать в течение нескольких часов!
Недопустимо увеличивать тайм-аут на брандмауэре глобально и,
конечно, он не поддерживает более длительные тайм-ауты для определенных потоков.
Я исправил эту проблему для неактивных соединений PuTTY;
это позволяетнастраиваемый keep-alive.
Однако я пока не обнаружил подобной поддержки в программном обеспечении TOAD.
Немного покопавшись в общесистемных конфигурациях, я наткнулся на эту информацию на сайте Microsoft TechNetНастройка общесистемных Keep-Alivesчто подразумевает работу сKeepAliveTimeи связанные с ними переменные реестра.
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveTime
Это похоже наКонфигурация всей системы Linux для использования общесистемного keepalive.
Но для этого программы должны использовать setsockopt()
и запрашивать поддержку активности (верно?).
Помните, что поддержка keepalive, даже если она настроена в ядре, не является поведением по умолчанию в Linux. Программы должны запрашивать управление keepalive для своих сокетов с помощью интерфейса setsockopt. Существует относительно немного программ, реализующих keepalive...
Вопросы
- Могу ли я это использовать?Метод KeepAliveTime на клиентских машинах Windows или, возможно, на сервере?
(кто-нибудь пробовал?)- Есть ли другой способ поддерживать эти TOAD-соединения активными (с любого конца связи)?
решение1
Установите значениеSQLNET.EXPIRE_TIMEв sqlnet.ora.
Вот чторуководство Oracleговорит по этому поводу:
Цель
Используйте параметр SQLNET.EXPIRE_TIME
для указания временного интервала в минутах для отправки зонда для проверки активности клиент-серверных соединений. Установка значения больше 0 гарантирует, что соединения не останутся открытыми на неопределенный срок из-за ненормального завершения работы клиента. Если зонд находит завершенное соединение или соединение, которое больше не используется, он возвращает ошибку, что приводит к завершению процесса сервера. Этот параметр в первую очередь предназначен для сервера базы данных, который обычно обрабатывает несколько соединений одновременно.
Ограничения на использование функции обнаружения разорванного соединения:
- Это не допускается в завещанных соединениях.
- Несмотря на небольшой размер, пакет зондирования генерирует дополнительный трафик, который может снизить производительность сети.
- В зависимости от используемой операционной системы серверу может потребоваться дополнительная обработка, чтобы отличить событие проверки соединения от других происходящих событий. Это также может привести к снижению производительности сети.
По умолчанию: 0
Минимальное значение: 0
Рекомендуемое значение: 10
Пример
SQLNET.EXPIRE_TIME=10
решение2
У вас есть доступ по SSH? Вы можете настроить туннель SSH и отправлять SQL-сообщения через него.
TOAD: сервер (или tnsnames) становится localhost, порт прослушивания — случайный порт, например 12346
PuTTY: переадресация портов. исходный порт: 12346, пункт назначения: $REMOTE_IP:1521. Оставьте его как локальный порт.
Обязательно включите TCP keepalives в PuTTY в разделе «Подключение».
решение3
Я нашел это на сайте Dell и убедился, что это работает (под Toad 11.5.0.56): Есть ли у Toad настройки поддержания активности / интервала времени / пинга, чтобы сеть не прерывалась? (49507)
Подводя итог, - включите вывод в окне вывода СУБД, нажав на красную кнопку слева от строки меню вывода СУБД (она станет зеленой). Вы можете получить к ней доступ на вкладке вывода СУБД рядом с вкладкой сетки данных или через Вид -> вывод СУБД.
Это автоматически также включит опрос. По моему опыту, вам нужны оба DBMS OutputиОпрос включен для поддержания соединения.