Pré-requisitos recomendados e lista de verificação para resolver problemas de conectividade do SQL Server

Aplica-se ao: SQL Server
Número original do KB: 4009936

Para resolver problemas de conectividade de forma eficaz, recolha as seguintes informações:

  • O texto da mensagem de erro e os códigos de erro. Verifique se o erro é intermitente (ocorre apenas por vezes) ou consistente (ocorre sempre).

  • Registos de eventos da aplicação e do sistema a partir do SQL Server e dos sistemas cliente. Estes registos podem ajudar a verificar se existem problemas ao nível do sistema que ocorram no SQL Server.

  • Se as ligações estiverem a falhar a partir de uma aplicação, recolha as cadeias de ligação da aplicação. Normalmente, estas cadeias encontram-se em ficheirosWeb.configpara aplicações ASP.NET.

  • Recolha e reveja os registos de erros do SQL Server para obter outras mensagens de erro e exceções.

  • Se tiver acesso de administrador ao computador do SQL Server, recolha e reveja as definições atuais do computador e as contas de serviço através do seguinte procedimento:

    1. Transfira a versão mais recente do SQLCHECK.

    2. Deszipe o ficheiro transferido para uma pasta, por exemplo, C:\Temp.

    3. Execute a linha de comandos como administrador para recolher os dados e guardar num ficheiro. Por exemplo: SQLCHECK > C:\Temp\server01.SQLCHECK.TXT.

    Nota

    Se estiver a resolver problemas de conectividade a partir de um cliente remoto ou a resolver problemas de consultas do servidor ligado, execute a ferramenta SQLCHECK em todos os sistemas envolvidos.

Lista de verificação rápida para resolver problemas de conectividade

Nota

As secções seguintes ajudam-no a verificar rapidamente a existência de problemas de conectividade. Reveja os tópicos individuais para obter os passos de resolução de problemas detalhados.

Opção 1

Se tiver acesso à saída da ferramenta SQLCHECK mencionada na secção Pré-requisitos recomendados e rever as informações em várias secções do ficheiro de saída (Computador, Segurança do Cliente e SQL Server), utilize as informações para resolver os problemas que contribuem para o problema. Veja os seguintes exemplos:

Secção no ficheiro Texto a procurar Ação potencial Pode ajudar a resolver problemas (exemplos)
Informações do Computador Aviso: O controlador de rede pode estar desatualizado Procure novos controladores online. Vários erros de conectividade
Informações de Controlador e Segurança do Cliente Diffie-Hellman conjuntos de cifras estão ativados. Risco possível de falhas intermitentes do TLS se a versão do algoritmo for diferente entre clientes e servidores Se estiver a ter problemas de conectividade intermitentes, veja Applications experience forcibly closed TLS connection errors when connecting to SQL Servers in Windows (Aplicações com erros de ligação TLS fechado à força ao ligar a SQL Servers no Windows). Foi forçado o cancelamento de uma conexão existente pelo host remoto
Informações de Controlador e Segurança do Cliente SQL Aliases Se estiverem presentes, certifique-se de que os aliases estão configurados corretamente e apontando para o servidor e endereços IP corretos. Ocorreu um erro de rede ou específico à instância ao estabelecer uma conexão com o SQL Server
Informações do SQL Server Serviços de Interesse Se o serviço SQL não for iniciado, inicie-o. Se estiver a ter problemas ao ligar a uma instância nomeada, certifique-se de que o serviço SQL Server Browser foi iniciado ou tente reiniciar o serviço do browser. Ocorreu um erro de rede ou específico à instância ao estabelecer uma conexão com o SQL Server
Informações do SQL Server Propriedades da Conta de Serviço de Domínio Se configurar servidores ligados a partir do SQL Server e o valor Trust for Del estiver definido como falso, poderá deparar-se com problemas de autenticação com as consultas do servidor ligado. Resolver erros "O início de sessão falhou para o utilizador"
Informações do SQL Server O SPN não existe Verifique esta tabela para ver se os SPNs do SQL Server estão configurados corretamente e corrija quaisquer problemas identificados. Não é possível gerar contexto SSPI
Informações do SQL Server Detalhes da Instância do SQL Server Verifique os valores de TCP Ativado, Portas TCP, etc. Reveja se o TCP/IP está ativado no lado do servidor e se a instância predefinida do SQL está a escutar na porta 1433 ou numa porta diferente. Vários erros de conectividade

Opção 2

Se não conseguir executar o SQLCHECK no computador do SQL Server, pode verificar os seguintes itens antes de efetuar uma resolução de problemas aprofundada:

  1. Confirme que o SQL Server foi iniciado e que vê a seguinte mensagem no registo de erros do SQL Server:

    O SQL Server está agora pronto para ligações de cliente. Esta é uma mensagem informativa; não é necessária nenhuma ação do utilizador.

    Utilize o seguinte comando no PowerShell para verificar o estado dos serviços do SQL Server no sistema:

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

    Utilize o seguinte comando para procurar no ficheiro de registo de erros a cadeia específica "O SQL Server está agora pronto para ligações de cliente. Esta é uma mensagem informativa; nenhuma ação do usuário é necessária.":

    Get-ChildItem -Path "c:\program files\microsoft sql server\mssql*" -Recurse -Include Errorlog |select-string "SQL Server is now ready for client connections."
    
  2. Verifique a conectividade básica através do endereço IP e verifique se existem anomalias: ping -a <SQL Server machine>, ping -a <SQL Server IP address>. Se detetar problemas, trabalhe com o administrador de rede. Em alternativa, pode utilizar Test-NetConnection no PowerShell:

    $servername = "DestinationServer"
    Test-NetConnection -ComputerName $servername
    
  3. Verifique se o SQL Server está a escutar os protocolos adequados ao rever o registo de erros:

     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. Verifique se consegue ligar ao SQL Server com um ficheiro UDL. Se funcionar, poderá existir um problema com a cadeia de ligação. Para obter instruções sobre o procedimento de teste UDL, veja Test OLE DB connectivity to SQL Server by using a UDL file (Testar a conectividade da BD OLE ao SQL Server com um ficheiro UDL). Em alternativa, pode utilizar o seguinte script para criar e iniciar um ficheiro UDL-Test.udl (armazenado na pasta %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. Verifique se consegue ligar ao SQL Server a partir de outros sistemas cliente e inícios de sessão de utilizador diferentes. Se conseguir, o problema pode ser específico do cliente ou início de sessão que está a ter o problema. Verifique os registos de eventos do Windows no cliente problemático para obter mais ponteiros. Além disso, verifique se os controladores de rede estão atualizados.

  6. Se estiver a ter falhas de início de sessão, certifique-se de que existe um início de sessão (principal de servidor) e que tem CONNECT SQL permissões para o SQL Server. Além disso, certifique-se de que a base de dados predefinida atribuída ao início de sessão está correta e que o principal de base de dados mapeado tem CONNECT permissões para a base de dados. Para obter mais informações sobre como conceder CONNECT permissões ao principal de base de dados, veja CONCEDER Permissões de Base de Dados. Para obter mais informações sobre como conceder CONNECT SQL permissões ao principal de servidor, veja GRANT Server Permissions (Permissões do SERVIDOR GRANT). Utilize o seguinte script para o ajudar a identificar estas permissões:

    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. Se estiver a resolver problemas relacionados com o Kerberos, pode utilizar os scripts em Como determinar se o tipo de autenticação é Kerberos.

Problemas comuns de conectividade

Quando tiver percorrido os pré-requisitos e a lista de verificação, veja problemas comuns de conectividade e selecione a mensagem de erro correspondente para obter passos de resolução de problemas detalhados.