Share via


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

Se aplica a: SQL Server
Número 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 (solo se produce a veces) o coherente (se produce todo el tiempo).

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

  • Si se produce un error en las conexiones desde una aplicación, recopile las cadenas de conexión de la aplicación. Estas cadenas suelen encontrarse en archivos deWeb.config para aplicaciones ASP.NET.

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

  • Si tiene acceso de administrador al equipo 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 problemas de consultas de servidor vinculadas, 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 ayudan a comprobar rápidamente si hay problemas de conectividad. Revise los temas individuales para ver los pasos detallados de solución de problemas.

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 en varias secciones del archivo de salida (Equipo, Client Security y SQL Server), use la información para solucionar los problemas que contribuyen a su problema. Consulte los ejemplos siguientes:

Sección del archivo Texto que se va a buscar Posible acción 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 controladores y seguridad de cliente Diffie-Hellman conjuntos de cifrado están habilitados. Posible riesgo de errores tls intermitentes si la versión del algoritmo es diferente entre clientes y servidores Si tiene problemas de conectividad intermitentes, consulte Experiencia de aplicaciones con errores de conexión TLS cerrados por la fuerza 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 controladores y seguridad de cliente Alias de SQL Si está presente, asegúrese de que los alias estén configurados correctamente y que apunten 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 el servicio SQL no se inicia, inícielo. Si tiene problemas para conectarse a una instancia con nombre, asegúrese de que se inicia SQL Server servicio Browser o intente 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 el SQL Server y el valor De confianza para Del se establece en false, puede encontrarse con problemas de autenticación con las consultas del servidor vinculado. Solución de problemas de errores de "Error de inicio de sesión para el usuario"
información de SQL Server SPN no existe Compruebe esta tabla para ver si los SPN de los SQL Server están configurados correctamente y corregir los problemas identificados. Cannot generate SSPI context
información de SQL Server Detalles de SQL Server Instancia Compruebe los valores de TCP Habilitado, Puertos TCP, etc. Revise si TCP/IP está habilitado en el lado servidor y si la instancia predeterminada de SQL está escuchando en 1433 o en otro puerto. Varios errores de conectividad

Opción 2

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

  1. Asegúrese de que se ha iniciado SQL Server y de que ve el siguiente mensaje en el registro de errores de SQL Server:

    SQL Server ya está listo para las conexiones de cliente. Se trata de un mensaje informativo; no se requiere ninguna acción del usuario.

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

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

    Use el siguiente comando para buscar en el archivo de registro de errores la cadena específica "SQL Server ya está lista 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 escucha en los protocolos adecuados; para ello, revise 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 Prueba de 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 diferentes inicios de sesión de usuario. Si puede hacerlo, 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 que 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. Para obtener más información sobre cómo conceder CONNECT SQL permisos a la entidad de seguridad de servidor, consulte GRANT Server Permissions(CONCEDER permisos de servidor). 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 está solucionando problemas relacionados con Kerberos, puede usar los scripts de Determine If I Am Connected to SQL Server using Kerberos Authentication (Determinar si estoy conectado a SQL Server mediante la autenticación Kerberos) para determinar si Kerberos está configurado correctamente en los servidores SQL Server.

Problemas comunes de conectividad

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