Conditions préalables recommandées et liste de contrôle pour résoudre les problèmes de connectivité SQL Server

S'applique à : SQL Server
Numéro de base de connaissances d’origine : 4009936

Résumé

Cet article fournit un point de départ en deux parties pour résoudre les problèmes de connectivité SQL Server : un ensemble de conditions préalables recommandées pour la collecte des données de diagnostic et une liste de contrôle rapide que vous pouvez utiliser avant de commencer l’analyse approfondie. Utilisez-le pour collecter des messages d’erreur, des journaux d’événements, des chaînes de connexion et des détails de configuration SQL Server, et pour vérifier que les services, les écouteurs, les protocoles, les autorisations et les chemins réseau sont intègres. Une fois ces étapes terminées, passez aux problèmes de connectivité courants pour sélectionner le message d’erreur correspondant à votre scénario pour obtenir des étapes détaillées de résolution des problèmes.

Pour résoudre efficacement les problèmes de connectivité, rassemblez les informations suivantes :

  • Texte du message d’erreur et des codes d’erreur. Vérifiez si l’erreur est intermittente (se produit seulement parfois) ou cohérente (se produit tout le temps).

  • Journaux des événements d’application et système à partir de SYSTÈMES SQL Server et clients. Ces journaux d’activité peuvent vous aider à vérifier s’il existe des problèmes à l’échelle du système sur votre SQL Server.

  • Si les connexions échouent à partir d’une application, collectez les chaînes de connexion de l’application. Ces chaînes sont généralement trouvées dans les fichiers Web.config pour les applications ASP.NET.

  • Collectez et passez en revue les journaux d’erreurs SQL Server pour d’autres messages d’erreur et exceptions.

  • Si vous disposez d’un accès administrateur à l’ordinateur SQL Server, rassemblez et examinez les paramètres de l’ordinateur et les comptes de service actuels à l’aide de la procédure suivante :

    1. Téléchargez la dernière version de SQLCHECK.

    2. Décompressez le fichier téléchargé dans un dossier, par exemple, C :\Temp.

    3. Exécutez l’invite de commandes en tant qu’administrateur pour collecter les données et enregistrer dans un fichier. Par exemple : SQLCHECK > C:\Temp\server01.SQLCHECK.TXT.

    Note

    Si vous résolvez des problèmes de connectivité depuis un client distant ou des problèmes de requêtes sur un serveur lié, exécutez l’outil SQLCHECK sur tous les systèmes impliqués.

Liste de contrôle rapide pour résoudre les problèmes de connectivité

Note

Les sections suivantes vous aident à rechercher rapidement les problèmes de connectivité. Pour obtenir des étapes détaillées de résolution des problèmes, passez en revue les rubriques individuelles.

Passer en revue la sortie de l’outil SQLCHECK

Si vous avez accès à la sortie de l’outil SQLCHECK mentionné dans la section Conditions préalables recommandées, passez en revue les informations de différentes sections du fichier de sortie (Ordinateur, Sécurité du client et SQL Server). Utilisez les informations pour résoudre les problèmes qui contribuent à votre problème. Regardez les exemples suivants :

Section du fichier Texte à rechercher Action potentielle Peut vous aider à résoudre les problèmes (exemples)
Informations sur l’ordinateur Avertissement : Le pilote réseau peut être obsolète Vérifiez en ligne les nouveaux pilotes. Diverses erreurs de connectivité
Informations sur la sécurité du client et le pilote Les suites de chiffrement Diffie-Hellman sont activées. Risque possible d’échecs TLS intermittents si la version de l’algorithme est différente entre les clients et les serveurs Si vous rencontrez des problèmes de connectivité intermittents, consultez Les applications rencontrent des erreurs de connexion TLS fermées de force lors de la connexion à SQL Server dans Windows. Une connexion existante a dû être fermée par l’hôte distant
Informations sur la sécurité du client et le pilote Alias SQL S’il est présent, vérifiez que les alias sont configurés correctement et pointez vers le serveur et les adresses IP appropriés. Une erreur liée au réseau ou spécifique à une instance s'est produite lors de l'établissement d'une connexion à SQL Server
Informations SQL Server Services d’intérêt Si votre service SQL n’est pas démarré, démarrez-le. Si vous rencontrez des problèmes de connexion à une instance nommée, vérifiez que SQL Server service Browser est démarré ou essayez de redémarrer le service de navigateur. Une erreur liée au réseau ou spécifique à une instance s'est produite lors de l'établissement d'une connexion à SQL Server
Informations SQL Server Propriétés du compte de service de domaine Si vous configurez des serveurs liés à partir de votre SQL Server et que la valeur Trust for Del est définie sur false, vous pouvez rencontrer des problèmes d’authentification avec vos requêtes de serveur lié. Résolution des erreurs « Échec de connexion pour l’utilisateur »
Informations SQL Server SPN n’existe pas Vérifiez ce tableau pour voir si les noms de principal de service de votre serveur SQL Server sont correctement configurés et corrigez les problèmes identifiés. Impossible de générer un contexte SSPI
Informations SQL Server Détails de l’instance SQL Server Vérifiez les valeurs de TCP activé, ports TCP, et autres paramètres. Vérifiez si TCP/IP est activé côté serveur et si votre instance SQL par défaut écoute sur 1433 ou un autre port. Diverses erreurs de connectivité

Exécuter des vérifications manuelles lorsque SQLCHECK n’est pas disponible

Si vous ne pouvez pas exécuter SQLCHECK sur votre ordinateur SQL Server, vérifiez les éléments suivants avant d'effectuer une résolution détaillée des problèmes :

  1. Vérifiez que SQL Server est démarré et que vous voyez le message suivant dans le journal des erreurs SQL Server :

    SQL Server est maintenant prêt pour les connexions clientes. Ce message est fourni à titre d'information. Aucune action n'est requise de la part de l'utilisateur.

    Utilisez la commande suivante dans PowerShell pour vérifier l’état des services SQL Server sur le système :

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

    Utilisez la commande suivante pour rechercher dans le fichier journal des erreurs la chaîne spécifique « SQL Server est maintenant prêt pour les connexions clientes. Ceci est un message d’information ; aucune action n’est requise de la part de l’utilisateur. » :

    Get-ChildItem -Path "c:\program files\microsoft sql server\mssql*" -Recurse -Include Errorlog |select-string "SQL Server is now ready for client connections."
    
  2. Vérifiez la connectivité de base via l’adresse IP et vérifiez les anomalies suivantes : ping -a <SQL Server machine>, ping -a <SQL Server IP address>. Si vous remarquez des problèmes, contactez votre administrateur réseau. Vous pouvez également utiliser Test-NetConnection dans PowerShell :

    $servername = "DestinationServer"
    Test-NetConnection -ComputerName $servername
    
  3. Vérifiez si SQL Server écoute sur les protocoles appropriés en examinant le journal des erreurs :

     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. Vérifiez si vous pouvez vous connecter à SQL Server à l’aide d’un fichier UDL. S’il fonctionne, il peut y avoir un problème avec la chaîne de connexion. Pour obtenir des instructions sur la procédure de test UDL, consultez Tester la connectivité OLE DB à SQL Server à l’aide d’un fichier UDL. Vous pouvez également utiliser le script suivant pour créer et lancer un fichier UDL-Test.udl (stocké dans le dossier %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. Vérifiez si vous pouvez vous connecter à SQL Server à partir d’autres systèmes clients et des connexions utilisateur différentes. Si vous le pouvez, le problème peut être spécifique au client ou à la connexion qui rencontre le problème. Consultez les journaux des événements Windows sur le client problématique pour plus de pointeurs. Vérifiez également si les pilotes réseau sont à jour.

  6. Si vous rencontrez des échecs de connexion, vérifiez qu’une connexion (principal de serveur) existe et qu’elle dispose CONNECT SQL des autorisations pour SQL Server. En outre, assurez-vous que la base de données par défaut affectée à la connexion est correcte et que le principal de base de données mappé dispose CONNECT d’autorisations sur la base de données. Pour plus d’informations sur l’octroi CONNECT d’autorisations au principal de base de données, consultez GRANT Database Permissions. Pour plus d’informations sur l’octroi CONNECT SQL d’autorisations au principal du serveur, consultez GRANT Server Permissions. Utilisez le script suivant pour vous aider à identifier ces autorisations :

    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 vous résolvez les problèmes liés à Kerberos, vous pouvez utiliser les scripts à l’adresse Guide pratique pour déterminer si le type d’authentification est Kerberos.

Problèmes de connectivité courants

Après avoir examiné les prérequis et la liste de contrôle, consultez les problèmes de connectivité courants et sélectionnez le message d’erreur correspondant à votre scénario pour obtenir des étapes de dépannage détaillées.