Compartir a través de


Requisitos previos recomendados y lista de comprobación para solucionar problemas de conectividad de SQL Server

Se aplica a: SQL Server
Número de KB original: 4009936

Para solucionar problemas de conectividad de forma eficaz, recopile la siguiente información:

  • Texto del mensaje de error y los códigos de error. Compruebe si el error es intermitente (se produce solo a veces) o coherente (se produce todo el tiempo).

  • Registros de eventos de aplicación y sistema de SQL Server y sistemas cliente. Estos registros pueden ayudar a comprobar si se producen problemas en todo el sistema en SQL Server.

  • Si se produce un error en las conexiones de una aplicación, recopile los cadena de conexión de la aplicación. Estas cadenas normalmente se encuentran en archivos Web.config para aplicaciones de ASP.NET.

  • Recopile y revise los registros de errores de SQL Server para ver otros mensajes de error y excepciones.

  • Si tiene acceso de administrador al equipo con SQL Server, recopile y revise la configuración actual del equipo y las cuentas de servicio mediante el procedimiento siguiente:

    1. Descargue la versión más reciente de SQLCHECK.

    2. Descomprima el archivo descargado en una carpeta, por ejemplo, C:\Temp.

    3. Ejecute el símbolo del sistema como administrador para recopilar los datos y guardarlos en un archivo. Por ejemplo: SQLCHECK > C:\Temp\server01.SQLCHECK.TXT.

    Nota:

    Si está solucionando problemas de conectividad desde un cliente remoto o solucionando consultas de servidor vinculado, ejecute la herramienta SQLCHECK en todos los sistemas implicados.

Lista de comprobación rápida para solucionar problemas de conectividad

Nota:

Las secciones siguientes le ayudarán a comprobar rápidamente si hay problemas de conectividad. Revise los temas individuales para ver los pasos de solución de problemas detallados.

Opción 1

Si tiene acceso a la salida de la herramienta SQLCHECK mencionada en la sección Requisitos previos recomendados y revisa la información de varias secciones del archivo de salida (Equipo, Seguridad de cliente y SQL Server), use la información para solucionar los problemas que contribuyen a su problema. Consulte los siguientes ejemplos:

Sección del archivo Texto que se buscará Acción potencial Puede ayudar a solucionar problemas (ejemplos)
Información del equipo Advertencia: El controlador de red puede estar obsoleto Compruebe en línea si hay nuevos controladores. Varios errores de conectividad
Información de seguridad y controladores de cliente Los conjuntos de cifrado Diffie-Hellman están habilitados. Posible riesgo de errores intermitentes de TLS si la versión del algoritmo es diferente entre los clientes y los servidores Si tiene problemas de conectividad intermitentes, consulte Experiencia de aplicaciones con errores de conexión TLS cerrados forzadamente al conectarse a servidores SQL Server en Windows. Se ha forzado la interrupción de una conexión existente por el host remoto
Información de seguridad y controladores de cliente Alias de SQL Si está presente, asegúrese de que los alias estén configurados correctamente y apunte al servidor y las direcciones IP correctos. A network-related or instance-specific error occurred while establishing a connection to SQL Server
Información de SQL Server Servicios de interés Si no se inicia el servicio SQL, inícielo. Si tiene problemas para conectarse a una instancia con nombre, asegúrese de que se inicia el servicio SQL Server Browser o intenta reiniciar el servicio del explorador. A network-related or instance-specific error occurred while establishing a connection to SQL Server
Información de SQL Server Propiedades de la cuenta de servicio de dominio Si configura servidores vinculados desde SQL Server y el valor Trust for Del está establecido en false, puede encontrarse con problemas de autenticación con las consultas del servidor vinculado. Solución de problemas de errores de inicio de sesión del usuario
Información de SQL Server El SPN no existe Compruebe esta tabla para ver si los SPN de SQL Server están configurados correctamente y corrigen los problemas identificados. Cannot generate SSPI context
Información de SQL Server Detalles de la instancia de SQL Server Compruebe los valores de TCP Enabled, TCP Ports, etc. Revise si TCP/IP está habilitado en el servidor y si la instancia predeterminada de SQL escucha en 1433 o en otro puerto. Varios errores de conectividad

Opción 2

Si no puede ejecutar SQLCHECK en el equipo con SQL Server, puede comprobar los siguientes elementos antes de realizar una solución de problemas detallada:

  1. Asegúrese de que SQL Server está iniciado y que vea el siguiente mensaje en el registro de errores de SQL Server:

    SQL Server ya está preparado para recibir conexiones de clientes. Este mensaje es solo informativo; no se requiere ninguna acción del usuario.

    Use el comando siguiente en PowerShell para comprobar el estado de los servicios de SQL Server en el sistema:

    Get-Service | Where {$_.status -eq 'running' -and $_.DisplayName -match "sql server*"}
    

    Use el siguiente comando para buscar el archivo de registro de errores de la cadena específica "SQL Server ya está listo para las conexiones de cliente. Este es un mensaje informativo. No se requiere ninguna acción del usuario.":

    Get-ChildItem -Path "c:\program files\microsoft sql server\mssql*" -Recurse -Include Errorlog |select-string "SQL Server is now ready for client connections."
    
  2. Compruebe la conectividad básica a través de la dirección IP y compruebe si hay anomalías: ping -a <SQL Server machine>, ping -a <SQL Server IP address>. Si observa algún problema, trabaje con el administrador de red. Como alternativa, puede usar Test-NetConnection en PowerShell:

    $servername = "DestinationServer"
    Test-NetConnection -ComputerName $servername
    
  3. Compruebe si SQL Server está escuchando en los protocolos adecuados revisando el registro de errores:

     Get-ChildItem -Path "c:\program files\microsoft sql server\mssql*" -Recurse -Include Errorlog |select-string "Server is listening on" , "ready to accept connection on" -AllMatches
    
  4. Compruebe si puede conectarse a SQL Server mediante un archivo UDL. Si funciona, puede haber un problema con el cadena de conexión. Para obtener instrucciones sobre el procedimiento de prueba de UDL, consulte Probar la conectividad OLE DB con SQL Server mediante un archivo UDL. Como alternativa, puede usar el siguiente script para crear e iniciar un archivo UDL-Test.udl (almacenado en la carpeta %TEMP% ):

    clear
    
    $ServerName = "(local)"
    $UDL_String = "[oledb]`r`n; Everything after this line is an OLE DB initstring`r`nProvider=MSOLEDBSQL.1;Integrated Security=SSPI;Persist Security Info=False;User ID=`"`";Initial Catalog=`"`";Data Source=" + $ServerName + ";Initial File Name=`"`";Server SPN=`"`";Authentication=`"`";Access Token=`"`""
    
    Set-Content -Path ($env:temp + "\UDL-Test.udl") -Value $UDL_String -Encoding Unicode
    
    #open the UDL
    Invoke-Expression ($env:temp + "\UDL-Test.udl")
    
  5. Compruebe si puede conectarse a SQL Server desde otros sistemas cliente y inicios de sesión de usuario diferentes. Si es capaz, el problema podría ser específico del cliente o del inicio de sesión que está experimentando el problema. Compruebe los registros de eventos de Windows en el cliente problemático para obtener más punteros. Además, compruebe si los controladores de red están actualizados.

  6. Si experimenta errores de inicio de sesión, asegúrese de que existe un inicio de sesión (entidad de seguridad del servidor) y tiene CONNECT SQL permisos para SQL Server. Además, asegúrese de que la base de datos predeterminada asignada al inicio de sesión es correcta y de que la entidad de seguridad de base de datos asignada tiene CONNECT permisos para la base de datos. Para obtener más información sobre cómo conceder CONNECT permisos a la entidad de seguridad de base de datos, consulte GRANT Database Permissions( Permisos de base de datos GRANT). Para obtener más información sobre cómo conceder CONNECT SQL permisos a la entidad de seguridad del servidor, consulte GRANT Server Permissions. Use el siguiente script para ayudarle a identificar estos permisos:

    clear
    ## replace these variables with the login, user, database and server 
    $server_principal = "CONTOSO\JaneK"  
    $database_principal = "JaneK"
    $database_name = "mydb"
    $server_name = "myserver"
    
    Write-Host "`n******* Server Principal (login) permissions *******`n`n"
    sqlcmd -E -S $server_name -Q ("set nocount on; SELECT convert(varchar(32),pr.type_desc) as login_type, convert(varchar(32), pr.name) as login_name, is_disabled,
      convert(varchar(32), isnull (pe.state_desc, 'No permission statements')) AS state_desc, 
      convert(varchar(32), isnull (pe.permission_name, 'No permission statements')) AS permission_name,
      convert(varchar(32), default_database_name) as default_db_name
      FROM sys.server_principals AS pr
      LEFT OUTER JOIN sys.server_permissions AS pe
        ON pr.principal_id = pe.grantee_principal_id
      WHERE is_fixed_role = 0 -- Remove for SQL Server 2008
      and name = '" + $server_principal + "'")
    
    Write-Host "`n******* Database Principal (user) permissions *******`n`n"
    sqlcmd -E -S $server_name -d $database_name -Q ("set nocount on; SELECT convert(varchar(32),pr.type_desc) as user_type, convert(varchar(32),pr.name) as user_name, 
      convert(varchar(32), isnull (pe.state_desc, 'No permission statements')) AS state_desc, 
      convert(varchar(32), isnull (pe.permission_name, 'No permission statements')) AS permission_name 
      FROM sys.database_principals AS pr
      LEFT OUTER JOIN sys.database_permissions AS pe
        ON pr.principal_id = pe.grantee_principal_id
      WHERE pr.is_fixed_role = 0
      and name = '" + $database_principal + "'")
    
    Write-Host "`n******* Server to Database Principal mapping ********`n"
    sqlcmd -E -S $server_name -d $database_name -Q ("exec sp_helplogins '" + $server_principal + "'")
    
  7. Si va a solucionar problemas relacionados con Kerberos, puede usar los scripts en Cómo determinar si el tipo de autenticación es Kerberos.

Solución de problemas de errores de conexión transitorios en SQL Database e Instancia administrada de SQL

Cuando haya pasado por los requisitos previos y la lista de comprobación, consulte problemas comunes de conectividad y seleccione el mensaje de error correspondiente para ver los pasos detallados de solución de problemas.