2012-03-27 25 views
11

Sí amigos, esta es otra vez.SQL Server: "se estableció con éxito una conexión con el servidor ... la conexión existente fue cerrada a la fuerza por el host remoto".

"A connection was successfully established with the server, but then an error occurred during the login process (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)"

me siento ... tengo Google'd esto, tienen leer los demás artículos StackOverflow sobre este problema, y ​​yo tener intentado todo tipo de sugerencias, pero nada funciona .

Aquí hay algunas notas sobre lo que estamos viendo.

  1. Este problema se produce de vez en cuando en SQL Server Management Studio sí mismo (hacer cualquier tipo de actividad de base de datos ... obtener una lista de tablas en una base de datos, echar un vistazo a un procedimiento almacenado, etc.)

  2. también ocurre en Visual Studio 2010 sí, cuando se trata de obtener datos de los servidores (por ejemplo, al crear un archivo .dbml, etc)

  3. también ocurre a veces en nuestra .Net (ASP , WPF, Silverlight) aplicaciones.

  4. Nuestros servidores SQL Server 2005 & 2008 están basados ​​en máquinas virtuales en centros de datos de todo el mundo, y a veces vemos este error en cada uno de ellos. Pero la mayoría de las veces, todos funcionan absolutamente bien.

  5. Cuando se produce el error, podemos simplemente "volver a intentar" lo que causó el error, y luego funcionará bien.

  6. .. Creemos que si tenemos un servidor web IIS en un centro de datos en una ciudad en particular, y que tiene acceso a un servidor SQL Server en el mismo centro de datos, entonces nosotros no hacemos ver el tema.

  7. Creemos que ... si nos conectamos a los servidores y especificamos el ID de usuario y la contraseña que se utilizarán, este error se produce con mucha más frecuencia que si solo utilizamos la autenticación de Active Directory.

Ponga todo junto, y me parece que es como un problema de red.
¿Pero alguien puede sugerir qué buscar?

Esto no es un error en nuestras aplicaciones .Net, ya que incluso SQL Server Management Studio "dispara" con este error.

Nos desconcierta.

+0

NIC malo, o quizás 2 máquinas en la red con la misma IP? –

Respuesta

1

Podría ser cualquier número de problemas de red. CUALQUIER COSA que impida que el código llegue al servidor, incluso durante los pocos milisegundos necesarios para realizar una consulta.

también podría ser el resultado de una conmutación por error. Cuando pasamos de un único servidor SQL a un entorno agrupado, veremos que esto ocurra durante una conmutación por error. En este caso, resultó ser nuestro Pool de Conexión. En esencia, el clúster SQL tiene un controlador y dos servidores detrás. A y B.

Digamos que nuestra aplicación web está utilizando el servidor A muy bien, la agrupación de conexiones crea una conexión en ambos lados.El servidor es consciente de ello y la aplicación web lo sabe. Una vez que el clúster se transfiere al segundo servidor, la aplicación web conoce la conexión, pero el servidor B no, por lo que se produce un error.

El punto es que cualquier causa posible de problemas de red imaginables puede ser la causa. Ataques de DOS en el servidor, ataques de hombre en el medio que interceptan y cambian el tráfico. Alguien se tropieza con un cable de Ethernet y está suelto en el conector. Usted lo nombra, si puede causar un problema de conexión, podría ser la causa.

Su problema también suena como el que tuvimos recientemente, también tenemos un entorno virtual, con un software que mueve VM de un host a otro según sea necesario para equilibrar la carga. De vez en cuando, nos bombardeaban con el mismo error. Resultó ser un problema con los controladores NIC en uno de los hosts, por lo que cada vez que una VM se movía a ese host en particular, se producían errores.

Realmente no es un problema de programación. Es un problema ambiental y necesita profesionales capacitados con acceso directo a su entorno para investigar y resolver esto.

+1

¿Quizás pueda sugerir algunas técnicas de depuración o software para rastrear el origen del problema en otros entornos? – mellamokb

6

Sólo en caso de cualquier otra persona llega a este tema, que finalmente encontramos la solución.

Nuestra empresa usa Riverbed software para comprimir datos, cuando se está pasando de una ubicación a otra, y esto de alguna manera hace que algunas conexiones se eliminen.

Nuestros gurús de TI encontraron una configuración que finalmente solucionó este problema.

Creo que hay una configuración para desactivar los resultados de compresión de SQL Server (o algo así). Eso lo solucionó para nosotros.

0

Ocurría en nuestro código cuando abríamos la conexión de db para oráculo y aprobábamos DBtype como SQL en nuestro objeto de base de datos.

1

Mi problema fue que inadvertidamente estaba usando una red inalámbrica para conectarme a nuestra red porque el cable Ethernet estaba defectuoso. Esto después de reparar SQL Server, ejecutando un reinicio de Winsock como se recomienda en otra parte ...

1

Estoy experimentando el mismo problema y nuestra aplicación interactúa con varios SQL DB de Azure. Creo (lo mismo que usted) No tengo un error en el código C# para causar este problema. Lo hemos resuelto con un simple para el ciclo que contiene un intento adicional de tratar de conectarse al SQL de Azure nuevamente si el intento anterior falla y luego ejecuta la consulta.

La mayoría de las veces todo funciona bien, pero a veces podemos ver el ciclo iniciado y la segunda o la tercera vez que se ejecutó correctamente sin el error mencionado a continuación. Después de que vemos en el archivo de registro el error abajo para todos los intentos fallidos:

A connection was successfully established with the server, 
but then an error occurred during the login process. (provider: TCP 
Provider, error: 0 - An existing connection was forcibly closed by the 
remote host.) 

A pesar de que esta es una solución menos entonces bastante, que nos permitió correr nuestra aplicación sin interrupciones. Sé que has mencionado que intentar conectar de nuevo (para introducir algo de tolerancia a la falla de conexión) resuelve el problema y desafortunadamente esta es la única solución correcta que encontré hasta ahora.

Debo mencionar que hemos intentado muchas estrategias de depuración para resolver esto.En este momento, todo apunta a la disponibilidad de la base de datos a la que intentamos conectar, es decir: ocurre si se excede la cantidad de conexiones DB permitidas. (o eso parece en este momento)

+0

este error también me sucedió con SQL Azure, pero el verdadero problema es que tuve una conexión abierta demasiado tiempo durante la depuración, por lo que la ejecución de la aplicación funcionó naturalmente bien. Puede que solo tenga que aumentar el tiempo de espera de conexión - 'SqlConnection.ConnectionTimeout', NO el' CommandTimeout'. – SliverNinja

0

En mi caso, el error fue la primera sugerencia de Microsoft: El cliente se está conectando con una versión no compatible de SQL Server Native Client.

Cuestiones relacionadas