2009-08-20 66 views
29

¿Hay alguna forma de evitar que Oracle SQL Developer cierre mis conexiones de bases de datos o aumentar el tiempo de espera? Algunas veces, durante una consulta de larga ejecución, SQL Dev simplemente cierra la conexión, dejando mi consulta ejecutándose en el servidor pero sin resultados. Si conecto RDP al servidor y ejecuto SQL Dev localmente, nunca parece tener este problema.¿Cómo puedo evitar que Oracle SQL Developer cierre la conexión de base de datos?

+0

Pregunta relacionada con la solución para SQL Developer 4: http://stackoverflow.com/questions/12999811/when-sql-developer-is-idle-i-lose-my-connection – Vadzim

Respuesta

7

Esto no suena como un problema con el desarrollador de SQL, por supuesto, nunca me he encontrado. ¿Estás seguro de que no es otra cosa, como tu red? ¿Qué sucede si te conectas desde SQL plus desde tu escritorio?

+0

Hace un tiempo que marcábamos esta respuesta, pero sí fue un problema de red. –

+0

@KevinBabcock ¿Cuál fue el problema de red que enfrentaste aquí? – theCodeMachine

+0

Tengo Toad y Oracle SQL Developer, Oracle SQL Developer siempre se desconecta e intenta conectarse, es muy molesto, mientras tanto Toad mantiene la conexión todo el día. Ahora tengo que dejar Toad por motivos de negocios :( –

26

No tengo la respuesta para esto, pero estoy teniendo el mismo problema.

El firewall entre mi SQL Developer y la base de datos cierra automáticamente las sesiones "inactivas". Una consulta de larga ejecución es de acuerdo con el cortafuegos una sesión inactiva, por lo que la cierra. Todavía no he encontrado cómo hacer que SQL Developer envíe paquetes a través de una conexión con una consulta de larga ejecución, para que el firewall no cierre la conexión. Y no sé si esto es posible en absoluto.

Así que no creo que sea un problema de SQL Developer, sino un problema de firewall.

- ACTUALIZACIÓN

Existe una extensión para SQL Developer que le permite mantener las conexiones activas: http://sites.google.com/site/keepaliveext/

No está totalmente terminado todavía (por ejemplo, la notificación se obtiene estados al mismo tiempo de espera sin importa qué tiempo de espera haya especificado) pero funciona. No tengo, sin embargo, probado contra la última previa al lanzamiento de SQL Developer, pero funcionó con SQL Developer 2.2.x

- ACTUALIZACIÓN

Para SQL Developer 4+ puede utilizar: http://scristalli.github.io/SQL-Developer-4-keepalive/

+0

Probé la extensión keep-alive. http://sites.google.com/site/keepaliveext/ funciona exactamente como esperaba, gracias! –

+0

Parece que no trabajando en 4.0 – ATorras

+3

Una versión de trabajo para SQL Developer 4.0: https://bitbucket.org/scristalli/sql-developer-4-keepalive/overview –

8

También me parece un problema de firewall.

Puede tener un poco de suerte al configurar el parámetro EXPIRE_TIME en el archivo SQLNET.ORA del servidor. De la documentación:

Use el parámetro SQLNET.EXPIRE_TIME para especificar un intervalo de tiempo, en minutos, para enviar una sonda y verificar que las conexiones cliente/servidor estén activas. Establecer un valor mayor que 0 asegura que las conexiones no se dejan 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 hace que el proceso del servidor salga. Este parámetro está destinado principalmente para el servidor de base de datos, que generalmente maneja múltiples conexiones en cualquier momento.

10g Documentation on EXPIRE_TIME

+0

Probé con éxito la eficacia de este parámetro. ¡Gracias! –

5

Como una solución temporal a la misma, en el lado de 'Data Grid' se encuentra la pestaña 'Salida DBMS', activar la salida de DBMS y configurado la frecuencia de sondeo a un tiempo agradable .

+0

Buena sugerencia ... I no sé exactamente qué quiere decir con "Cuadrícula de datos" pero encontré esto en 'Ver> Salida de dmbs' (ALT, V, D). –

11

Aquí hay otra extensión Keep Connection Active que podría ser útil. (La extensión mencionada anteriormente contiene una serie de problemas que se resuelven en esta extn.)

http://sites.google.com/site/keepconnext/

+1

El trabajo en un puerto está casi completo, detalles aquí: http: // sites. google.com/site/keepconnext/ –

2

nuestra DBA parece haber encontrado una solución a este:

2.2. Si hay un cortafuegos presente entre la instancia OC4J &, la base de datos El cortafuegos podría desconectar las conexiones jdbc inactivas al servidor de la base de datos. Sin embargo, la instancia OC4J no puede detectar que el firewall ha agotado el tiempo de espera de la conexión a la base de datos. Oracle Net se puede configurar con Dead Connection Detection (SQLNET.EXPIRE_TIME) para solucionar este problema. Establezca EXPIRE_TIME en el servidor de la base de datos en un valor inferior al tiempo de espera de la conexión del firewall para que el DCD mantenga activa la conexión a la base de datos. Ver la Nota 151972.1 "Explicación de la conexión muerta (DCD)". Como se trata de una configuración configurada en el servidor de la base de datos, no en el midtier, se aplicará a todas las conexiones de la base de datos (OCI y thin JDBC). Soluciones alternativas: - Desactive o aumente el parámetro de tiempo de espera inactivo del firewall. o - Configure la configuración del tiempo TCP Keepalive en la base de datos y en los servidores midtier a un valor menor que el tiempo de espera de la conexión del firewall. Después de configurar el tiempo de TCP Keepalive, las máquinas enviarán repetidamente un paquete nulo después de los minutos especificados para mantener las conexiones activas. A medida que el paquete se envía cada vez dentro del tiempo de espera inactivo del cortafuegos, la conexión no se cerrará.

Cuestiones relacionadas