Se ha producido un error de nivel de transporte al recibir resultados del servidor [cerrado]

169

Recibo un error de SQL Server:

Se produjo un error de nivel de transporte al recibir resultados del servidor. (proveedor: proveedor de memoria compartida, error: 0: el identificador no es válido).

Estoy ejecutando Sql Server 2008 SP1, Windows 2008 Standard 64 bit.

Es una aplicación web .Net 4.0. Ocurre cuando se realiza una solicitud al servidor. Es intermitente. ¿Alguna idea de cómo puedo resolverlo?

Chuck Conway
fuente
3
Esto puede ocurrir si la base de datos se creó en una versión anterior de SQL Express / MSDE que estableció AUTO_CLOSE en True. O se reinició la instancia del servicio SQL Server.
devstuff
1
Puedo ser causado por una acción pendiente en su base de datos. Esto da como resultado un bloqueo de DB.
pix
44
La respuesta marcada no es una respuesta. La respuesta de Michael Olivero a continuación que en realidad proporciona contenido y seguirlo resolvió el problema cuando me encontré con él. (Cerrar manualmente el servidor web temporal en mi máquina de desarrollo). Recomiendo que se cambie la respuesta.
Adam Miller
3
@Flexo ¿Esto está cerrado como fuera de tema? Me acaba de ocurrir con nuevas instalaciones de VS 2017 y MS SQL 2016 Enterprise. Si bien funcionaba bien con VS 2015 Community.
Edward
1
Esto no debería estar fuera de tema. El problema no tiene nada que ver con el código en uso, por lo que no se puede crear un MCVE para él. Además, la razón de cierre establece: this one was resolved in a manner unlikely to help future readers- pero 179 mil personas se han encontrado con esta pregunta.
Nisarg

Respuestas:

102

El servidor de la base de datos cierra la conexión de la base de datos. La conexión sigue siendo válida en el grupo de conexiones de su aplicación; Como resultado, cuando recoge la cadena de conexión compartida e intenta ejecutarla, no puede llegar a la base de datos. Si está desarrollando Visual Studio, simplemente cierre el servidor web temporal en su barra de tareas.

Si sucede en producción, restablecer el grupo de aplicaciones para su sitio web debería reciclar el grupo de conexiones.

Michael Olivero
fuente
1
Esta es la respuesta real.
TheHuge_
2
En mi caso particular, tuve una MultipleActiveResultSets=Trueconfiguración en la cadena de conexión que causó el mismo error.
Semyon Vyskubov
17

Pruebe el siguiente comando en el símbolo del sistema:

netsh interface tcp set global autotuning=disabled

Esto desactiva las capacidades de escalado automático de la pila de red.

Simmo
fuente
20
¿Puede proporcionar algunos detalles sobre lo que realmente hace? ¿Hay alguna razón para no establecer ese valor a nivel mundial?
Drew Noakes
1
desactiva las capacidades de escalado automático de la pila de red.
Simmo
No funciona en Windows XP SP3. La interfaz de Netsh no tiene el subcomando tcp en Windows XP, sin embargo, funciona bien en Windows 7 SP1.
Narayanan
Sé que esto es antiguo, pero esta fue la única solución que funcionó para mí (la mayoría de los problemas / soluciones giran en torno a un servidor web / aplicación, mi situación es la aplicación de escritorio y el servidor de red local, sin IIS ni nada de eso). ¿Por qué desactivar el autoajuste / autoescalado solucionaría este problema?
Trent
1
en mi caso, Reapertura de SQL Server Management Studio resolvió el problema
Alex
15

Yo tuve el mismo problema. Reinicié Visual Studio y eso solucionó el problema.

piris
fuente
12

Para aquellos que no usan IIS, tuve este problema al depurar con Visual Studio 2010. Terminé todos los procesos del depurador: WebDev.WebServer40.EXE que resolvió el problema.

jth_92
fuente
Indique los pasos para saber cómo terminó esos procesos. Soy principiante y no sé qué quiere decir con "terminó todo el proceso de depuración"
Irrompible el
@Inquebrantable Acabo de usar el Administrador de tareas. En el administrador de tareas, puede ver todos los procesos en ejecución con el nombre WebDev.WebServer40.EXE. Consulte betanews.com/2015/10/08/how-to-kill-a-windows-process para saber cómo matar un proceso de Windows.
jth_92
8

Los errores de nivel de transporte a menudo están vinculados a la conexión al servidor sql que se rompe ... por lo general, la red.

El tiempo de espera caducado generalmente se genera cuando una consulta SQL tarda demasiado en ejecutarse.

Tan pocas opciones pueden ser:

  1. Verifique la conexión en VPN (si se usa) o cualquier otra herramienta
  2. Reiniciar IIS
  3. Reiniciar la máquina
  4. Optimizar consultas SQL.
NG
fuente
Respuesta simple pero me ahorró tiempo.
Kirk el
7

Todo lo que necesita es detener el servidor de desarrollo ASP.NET y ejecutar el proyecto nuevamente

MishMish
fuente
4

Si está conectado a su base de datos a través de Microsoft SQL Server Management, cierre todas sus conexiones y vuelva a intentarlo. Tenía este error cuando estaba conectado a otra base de datos de Azure, y funcionó para mí cuando lo cerré. Aún no sé por qué ...

watabou
fuente
Esta fue una solución que funcionó para mí. Apagué SQL Server Management Studio y luego nunca volví a ver este error.
Beevik
4

Estaba obteniendo esto, siempre después de unos 5 minutos de operación. Investigó y descubrió que siempre se producía una advertencia de e1iexpress antes del fallo. Esto aparentemente es un error que tiene que ver con ciertos adaptadores TCP / IP. Pero cambiar de WiFi a cableado no lo afectó.

Así que probé el Plan B y reinicié Visual Studio. Entonces funcionó bien.

En un estudio más detallado, noté que, cuando funcionaba correctamente, el mensaje The Thread '<No Name>' has exited with code 0aparecía casi exactamente en el momento en que la ejecución se bloqueó en intentos anteriores. Algunos Google revelan que ese mensaje aparece cuando (entre otras cosas) el servidor está recortando el grupo de subprocesos.

Presumiblemente había un hilo falso en el grupo de hilos y cada vez que el servidor intentaba "recortarlo", bajaba la aplicación.

Hot Licks
fuente
4

Mire el blog de MSDN que detalla este error:

Eliminar conexiones

El agrupador de conexiones elimina una conexión del grupo después de haber estado inactivo durante mucho tiempo, o si el agrupador detecta que la conexión con el servidor se ha cortado.

Tenga en cuenta que una conexión cortada solo se puede detectar después de intentar comunicarse con el servidor. Si se encuentra una conexión que ya no está conectada al servidor, se marca como no válida.

Las conexiones no válidas se eliminan del grupo de conexiones solo cuando se cierran o reclaman.

Si existe una conexión con un servidor que ha desaparecido, esta conexión se puede extraer del grupo incluso si el agrupador de conexiones no ha detectado la conexión cortada y la ha marcado como no válida.

Este es el caso porque la sobrecarga de verificar que la conexión sigue siendo válida eliminaría los beneficios de tener un agrupador al causar que ocurra otro viaje de ida y vuelta al servidor.

Cuando esto ocurre, el primer intento de usar la conexión detectará que se ha cortado la conexión y se produce una excepción.

Básicamente, lo que está viendo es esa excepción en la última oración.

Se toma una conexión del grupo de conexiones, la aplicación no sabe que la conexión física se ha ido, se intenta utilizarla bajo el supuesto de que la conexión física todavía está allí.

Y obtienes tu excepción.

Hay algunas razones comunes para esto.

  1. El servidor se ha reiniciado, esto cerrará las conexiones existentes.

En este caso, eche un vistazo al registro de SQL Server, que generalmente se encuentra en: C: \ Archivos de programa \ Microsoft SQL Server \\ MSSQL \ LOG

Si la marca de tiempo para el inicio es muy reciente, entonces podemos sospechar que esto es lo que causó el error. Intente correlacionar esta marca de tiempo con el tiempo de excepción.

2009-04-16 11: 32: 15.62 Server Logging Mensajes de SQL Server en el archivo 'C: \ Archivos de programa \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ LOG \ ERRORLOG'.

  1. Alguien o algo ha matado el SPID que se está utilizando.

Nuevamente, eche un vistazo en el registro de SQL Server. Si encuentra una muerte, intente correlacionar esta marca de tiempo con la hora de la excepción.

2009-04-16 11: 34: 09.57 spidXX El ID de proceso XX fue eliminado por el nombre de host xxxxx, el ID de proceso de host XXXX.

  1. Hay una conmutación por error (en una configuración espejo, por ejemplo) nuevamente, eche un vistazo en el registro de SQL Server.

Si hay una conmutación por error, intente correlacionar esta marca de tiempo con la hora de excepción.

2009-04-16 11: 35: 12.93 spidXX La base de datos reflejada "" está cambiando roles de "PRINCIPAL" a "ESPEJO" debido a la Conmutación por falla.

Rahul Tripathi
fuente
3

Recibe este mensaje cuando su script hace que el Servicio SQL se detenga por alguna razón. así que si inicia SQL Service nuevamente, tal vez su problema se resolverá.

Mohammad Sheykholeslam
fuente
Proporcione amablemente pasos sobre cómo iniciar el Servicio SQL. Soy un principiante y acabo de crear una aplicación asp.net mvc 5. y cuando corro "enable-migraciones" todo está bien, entonces me quedo "complemento de migración 'SDFD' todo está bien y luego al hacer clic en la actualización de base de datos, me sale este error por favor me guía.
El protegido
3

Sé que esto puede no ayudar a todos (quién sabe, tal vez sí), pero tuve el mismo problema y después de un tiempo, nos dimos cuenta de que la causa estaba algo fuera del código.

La computadora que intentaba llegar al servidor estaba en otra red, la conexión se podía establecer pero luego se cortaba.

La forma en que solíamos arreglarlo era agregar una ruta estática a la computadora, permitiendo el acceso directo al servidor sin pasar por el firewall.

route add p YourServerNetwork mask NetworkMask Router 

Muestra:

route add p 172.16.12.0 mask 255.255.255.0 192.168.11.2 

Espero que ayude a alguien, es mejor tener esto, al menos como una pista, así que si lo enfrentas, sabes cómo resolverlo.

coloboxp
fuente
2

Obtuve el mismo error en el entorno de desarrollo de Visual Studion 2012, detuve el IIS Express y volví a ejecutar la aplicación, comenzó a funcionar.

Murthy M
fuente
2

En mi caso, el servicio del servidor "SQL Server" se detuvo. Cuando reinicié el servicio que me permitió ejecutar la consulta y eliminar el error.

También es una buena idea examinar su consulta para averiguar por qué la consulta hizo que este servicio se detuviera

ingrese la descripción de la imagen aquí

usuario3447136
fuente
1

Tuve el mismo problema. Lo resolví, truncando el REGISTRO de SQL Server. Verifique eso y luego díganos si esta solución lo ayudó.

Lucas
fuente
1

Para mí, la respuesta es actualizar el sistema operativo de 2008R2 a 2012R2, la solución de iisreset o reiniciar el grupo de aplicaciones no funcionó para mí. También intenté desactivar la configuración de TCP Chimney Offload, pero no reinicié el servidor porque es un servidor de producción, que tampoco funcionó.

Bruce Liu
fuente
1

Para mí la solución fue totalmente diferente.

En mi caso, tenía una fuente de objetos que requería un parámetro de fecha y hora. Aunque ese parámetro ODS ConvertEmptyStringToNull era verdadero, 1/1/0001 se pasaba a SelectMethod. Eso a su vez causó una excepción de desbordamiento de fecha y hora sql cuando esa fecha y hora se pasó al servidor sql.

Se agregó una verificación adicional para datetime.year! = 0001 y eso me resolvió.

Extraño que arrojaría un error de nivel de transporte y no un error de desbordamiento de fecha y hora. De todos modos ..

KonaRin
fuente
1
no hay manera de que esto esté relacionado, debe haber sido una coincidencia
Michiel Cornille
1

Recientemente encontramos este error entre nuestro servidor comercial y nuestro servidor de base de datos. La solución para nosotros fue deshabilitar la "Descarga de IP" en las interfaces de red. Entonces el error desapareció.

Dave
fuente
1

Una de las razones por las que encontré este error es ' Tamaño del paquete = xxxxx ' en la cadena de conexión. Si el valor de xxxx es demasiado grande, veremos este error. Elimine este valor y deje que el servidor SQL lo maneje o lo mantenga bajo, dependiendo de las capacidades de la red.

Naresh Mittal
fuente
1

Me sucedió cuando intentaba restaurar una base de datos SQL y marqué la siguiente casilla de verificación en la Optionspestaña,

ingrese la descripción de la imagen aquí

Como es un servidor de base de datos independiente, simplemente cerrar SSMS y volver a abrirlo resolvió el problema para mí.

Muhammad Raja
fuente
1

Esto ocurre cuando la base de datos se descarta y se vuelven a crear algunos recursos compartidos aún se considera que la base de datos todavía existe, por lo que cuando se vuelve a ejecutar la consulta de ejecución para crear tablas en la base de datos después de que se volvió a crear, el error no volverá a aparecer y el Command(s) completed successfully.mensaje se mostrará en lugar del mensaje de error Msg 233, Level 20, State 0, Line 0 A transport-level error has occurred when sending the request to the server. (provider: Shared Memory Provider, error: 0 - No process is on the other end of the pipe.).

Simplemente ignore este error cuando descarte y vuelva a crear bases de datos y vuelva a ejecutar sus consultas DDL sin preocupaciones.

Ashraf Abusada
fuente
0

Recientemente enfrenté el mismo problema, pero no pude obtener una respuesta en Google. Entonces pensé en compartirlo aquí, para que pueda ayudar a alguien en el futuro.

Error:

Al ejecutar la consulta, la consulta proporcionará pocos resultados y arrojará el siguiente error.

"Se produjo un error de nivel de transporte al recibir la salida del servidor (TCP: proveedor, error: 0: el nombre de red especificado ya no está disponible"

Solución:

  1. Verifique el proveedor de ese servidor vinculado
  2. En las propiedades de ese proveedor, active la opción "Permitir en proceso" para que ese proveedor en particular solucione el problema.
Pradeepa.PK
fuente