Tengo un escenario donde las largas sesiones inactivas deTOADSoftLa comunicación del cliente con el servidor Oracle parece interrumpirse a medida que se agota el tiempo de espera en un firewall intermedio de estado completo.
¡Estas sesiones podrían estar inactivas durante varias horas!
No es aceptable aumentar el tiempo de espera del firewall globalmente y,
por supuesto, no admite tiempos de espera más prolongados para flujos específicos.
He solucionado este problema para las conexiones inactivas de PuTTY;
permite unmantener vivo configurable.
Pero todavía no he identificado ningún soporte de este tipo en el software TOAD.
Buscando un poco en las configuraciones de todo el sistema, se me ocurrió este detalle de Microsoft TechNet enConfiguración de Keep-Alives en todo el sistemaque implica trabajar con elmantener vivo el tiempoy variables de registro relacionadas.
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveTime
Esto parece elConfiguración de todo el sistema Linux para usar keep-alive en todo el sistema.
Pero eso requiere que los programas utilicen setsockopt()
y soliciten mantener vivo (¿verdad?).
Recuerde que el soporte keepalive, incluso si está configurado en el kernel, no es el comportamiento predeterminado en Linux. Los programas deben solicitar control keepalive para sus sockets utilizando la interfaz setsockopt. Hay relativamente pocos programas que implementen keepalive...
Preguntas
- Puedo usar estoTécnica KeepAliveTime en las máquinas cliente de Windows o tal vez en el servidor?
(¿Alguien lo ha probado?)- ¿Existe alguna otra forma de mantener activas estas conexiones TOAD (desde cualquier extremo de la comunicación)?
Respuesta1
Establecer el valor deSQLNET.EXPIRE_TIMEen sqlnet.ora.
Esto es lo queel manual de oráculodice sobre este tema:
Objetivo
Utilice el parámetro SQLNET.EXPIRE_TIME
para especificar el intervalo de tiempo, en minutos, para enviar una sonda para verificar que las conexiones cliente/servidor estén activas. Establecer un valor mayor que 0 garantiza que las conexiones no queden abiertas indefinidamente debido a una terminación anormal del cliente. Si la sonda encuentra una conexión terminada o una conexión que ya no está en uso, devuelve un error, lo que provoca que el proceso del servidor se cierre. Este parámetro está destinado principalmente al servidor de bases de datos, que normalmente maneja múltiples conexiones a la vez.
Las limitaciones en el uso de esta función de detección de conexión terminada son:
- No está permitido en conexiones heredadas.
- Aunque es muy pequeño, un paquete de sonda genera tráfico adicional que puede degradar el rendimiento de la red.
- Dependiendo del sistema operativo que se esté utilizando, es posible que el servidor necesite realizar un procesamiento adicional para distinguir el evento de sondeo de conexión de otros eventos que ocurren. Esto también puede provocar una degradación del rendimiento de la red.
Por defecto: 0
Valor mínimo: 0
Valor recomendado: 10
Ejemplo
SQLNET.EXPIRE_TIME=10
Respuesta2
¿Tienes acceso SSH? Puede configurar un túnel SSH y enviar la comunicación SQL a través de él.
TOAD: el servidor (o tnsnames) se convierte en localhost, el puerto de escucha es algún puerto aleatorio como 12346
PuTTY: reenvío de puertos. puerto de origen: 12346, destino: $REMOTE_IP:1521. Déjalo como puerto local.
Asegúrese de habilitar TCP keepalive en PuTTY a través de la sección Conexión.
Respuesta3
Encontré esto en el sitio de Dell y confirmé que funciona (bajo Toad 11.5.0.56): ¿Toad tiene una configuración de mantenimiento de vida/intervalo de tiempo/ping para que la red no se agote? (49507)
Para resumir: active la salida en la ventana Salida de DBMS haciendo clic en el icono del botón rojo a la izquierda de la barra de menú de Salida de DBMS (se volverá verde). Puede acceder a esto en la pestaña Salida de DBMS al lado de la pestaña Cuadrícula de datos, o a través de Ver -> Salida de DBMS.
Esto también activará automáticamente el sondeo. En mi experiencia, necesitas tanto la salida DBMSySondeo habilitado para mantener la conexión.