2009-06-23 935 views
11

Continuamos recibiendo este error al azar en nuestra aplicación web.¿Por qué recibiré este error de forma intermitente? "El servidor no se encontró o no fue accesible"

System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

No tendría sentido si conseguimos el error jamás tiempo, pero para conseguirlo de forma intermitente sugieren algo más está sucediendo.

¿Alguien ha experimentado esto? ¿Alguna sugerencia o teoría?

Gracias!

+1

¿sucede durante la ventana de copia de seguridad del servidor sql? –

+2

De lo contrario, podría sospechar que una NIC defectuosa o un enrutador/conmutador –

+1

como alguien sugirió, ¿su servidor SQL alguna vez se quedó sin CPU o memoria? Sugiero que publique su configuración de hardware ... –

Respuesta

6

Es posible que el servidor esté demasiado ocupado para responder. ¿Está utilizando SQL Express o Workgroup Edition? Además, ¿cuántas conexiones a la vez tiene este servidor? ¿Se está produciendo este error en todas las conexiones en un momento determinado, o se rechazan algunas conexiones mientras que otras tienen éxito al mismo tiempo?

Además, si hace un "PING -t Servername" y lo mira, ¿todos los ping regresan, o se pierden? Esto puede ser un indicador de interrupciones de red que también pueden causar este error.

4

He visto esto antes cuando estaba accediendo a un servidor remoto en otra ubicación. Sospeché que se debió a la configuración del enrutador entre los dos sitios, ya que era, digamos, cludgy. Es muy posible que lo obtengas debido a una configuración de red o hardware defectuoso, pero no llegaría a esa conclusión hasta que hayas agotado muchas otras posibilidades.

5

Tuvimos esto debido a muchos cortafuegos: cuanto más lejos esté el cliente (digamos HK o NY, estamos en Suiza), más a menudo sucedió. Londres: raramente. Suiza: nunca. Nos fue explicado (a través de nuestra ingeniería de DB y ayuda de MS) que las demoras causadas por los enrutadores y los firewalls a veces alteran los tiempos de Kerberos y/o relacionados.

Solución: utilice el puerto en la cadena de conexión. Esto evita la ida y vuelta al puerto 1434 para enumerar la instancia. Ya usamos FQDN.

Ejemplo: server.domain.tld \ ejemplo, el puerto

YNNV por supuesto, pero funcionó para nosotros

4

que tenía el mismo problema; también conseguimos éste:

System.Data.SqlClient.SqlException: An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

y éste:

System.Data.SqlClient.SqlException: A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)

El primero de ellos fue especialmente extraño, ya que no estábamos utilizando canalizaciones con nombre.

De todos modos, resultó que el problema era un interruptor defectuoso.

Me metí en problemas con la aplicación y el nivel de DB antes de configurar una tarea programada para PING entre los servidores de aplicaciones y las bases de datos (usando tanto la dirección IP como el nombre NETBIOS de los servidores, en caso de que el problema búsqueda de nombre netbios).

Los errores de ping ocurrieron de manera confiable al mismo tiempo que los errores de la base de datos, por lo que sabíamos que era el hardware de la red y no nada a un nivel superior.

Reemplazando el interruptor arreglado todo.

Cuestiones relacionadas