2012-08-28 68 views
6

Estoy tratando de hacer una inserción con una cantidad potencialmente grande de datos binarios en una base de datos remota de Oracle (11g) utilizando Entity Framework (ODP.Net). Funciona bien para archivos muy pequeños (< 5 KB), pero para los más grandes (por ejemplo, 44 ​​KB) me aparece un error: "ORA-03135: contacto perdido de conexión"."ORA-03135: contacto perdido de conexión" al insertar un archivo grande

No creo que sea el tiempo de espera, ya que la excepción ocurre dentro de un segundo de ejecutar el comando.

Intenté fijar las dos acciones siguientes en mi cadena de conexión, pero en vano:

  • Validate Connection=true
  • Pooling=false

También busqué en el archivo listener.log en la máquina remota. Muestra las conexiones que se están realizando, pero no hay signos de excepciones o conexiones terminadas.

Estoy a la espera de soluciones sugeridas o métodos de solución de problemas.

Editar:

El mismo SQL operaciones funcionan cuando se accede a una instancia de Oracle en la red local.

+0

Bueno, tal vez no es eso, pero tuve el "ORA-03135: contacto perdido de conexión" en cosas raras cuando la conexión no se perdió en absoluto. que Oracle ya no era capaz de tragar la declaración SQL enviada. Lo obtuve en grandes consultas (> 2000 líneas de código). Quizás te estoy enviando por el camino correcto, pero después de 4 horas sin respuesta, al menos podría contarte ese fragmento de mi propia experiencia. Para mí, parecía que el mensaje siempre aparece cuando el analizador del comando SQL se colgaba en el fondo. – hol

+0

Puede valer la pena verificar el registro de alertas en la máquina remota para ver si eso reportó un error. Si no, tal vez apunta a que el problema está en el extremo del cliente, no en el servidor. Además, ¿hay algún firewall en el camino, o cualquier otra cosa a nivel de red que pueda tener registros que pueda verificar? –

+0

Un registro de red sería útil. El firewall no está activado y es un servidor de Windows que aloja Oracle. No estoy seguro de dónde se registra el tráfico TCP en una máquina con Windows, pero es posible que deba descubrirlo. –

Respuesta

3

Esto puede ser un problema complicado con muchas causas y soluciones posibles. Haga clic aquí:

http://www.dba-oracle.com/t_ora_03135_connection_lost_contact.htm

Answer: The oerr utility shows this for the ORA-03135 error:

ORA-03135: connection lost contact

Cause: 1) Server unexpectedly terminated or was forced to terminate. or 2) Server timed out the connection.

Action: 1) Check if the server session was terminated. 2) Check if the timeout parameters are set properly in sqlnet.ora.

The ORA-03135 error is common when connecting remotely when a firewall terminates the connection.

One solution for the ORA-03135 error is to increase the value of the sqlnet.ora expire_time parameter in the sqlnet.ora file or to check for a expire parameter in a SQL*Plus profile.

To diagnose the ORA-03135 error, start by checking to see if the OS PID still exists, using the ps –ef|grep syntax.

Check to see if there is a Network Address Translation (NAT) between the client and server

In Windows, check to see if a Windows firewall is checking for your local connections:

Windows XP -> Control panel -> security -> Tab "Advanced"

Also, setting the parameters sqlnet.inbound_connect_timeout and inbound_connect_timeout_listenername to 0 can stop the ORA-03135 error.

también que el anterior, compruebe el registro de alertas de la base de datos de los errores que ocurren al mismo tiempo que la caída de la conexión. A veces puede ser causado por un ora-600 o ora-7445, por ejemplo. No debería aparecer en el registro de escucha ya que solo obtiene este error después de que se haya completado el protocolo de enlace.

+0

No he examinado este problema en algún momento, pero dado que los métodos de solución de problemas que se describen aquí parecen bastante completos, lo estoy marcando como la respuesta. –

0

Esta situación generalmente causada por conexión desconectada/obsoleta se toma del grupo de conexiones. Si obtiene esta excepción después de Pooling = false, lo más probable es que el firewall bloquee la conexión debido a tcp timeout inactivo. Asegúrese de que el valor de tiempo de espera de tcp inactivo es mayor que el tiempo de ejecución del comando esperado

Cuestiones relacionadas