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:
Transfira a versão mais recente do SQLCHECK.
Deszipe o ficheiro transferido para uma pasta, por exemplo, C:\Temp.
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.
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.
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 |
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:
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."
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 utilizarTest-NetConnection
no PowerShell:$servername = "DestinationServer" Test-NetConnection -ComputerName $servername
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
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")
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.
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 temCONNECT
permissões para a base de dados. Para obter mais informações sobre como concederCONNECT
permissões ao principal de base de dados, veja CONCEDER Permissões de Base de Dados. Para obter mais informações sobre como concederCONNECT 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 + "'")
Se estiver a resolver problemas relacionados com o Kerberos, pode utilizar os scripts em Como determinar se o tipo de autenticação é Kerberos.
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.