Вопросы

Вопросы

У меня есть сценарий, когда длительные сеансы простоя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...


Вопросы

  1. Могу ли я это использовать?Метод 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иОпрос включен для поддержания соединения.

Связанный контент