Prérequis et liste de contrôle recommandés pour résoudre les problèmes de connectivité SQL Server

S’applique à : SQL Server
Numéro de l’article d’origine dans la base de connaissances : 4009936

Pour résoudre efficacement les problèmes de connectivité, collectez 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 des applications et des systèmes SQL Server et clients. Ces journaux peuvent vous aider à case activée en cas de 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 à partir de l’application. Ces chaînes se trouvent généralement dans les fichiersWeb.config pour les applications ASP.NET.

  • Collectez et examinez SQL Server journaux d’erreurs pour rechercher d’autres messages d’erreur et exceptions.

  • Si vous disposez d’un accès administrateur à l’ordinateur SQL Server, rassemblez et passez en revue les paramètres actuels de l’ordinateur et les comptes de service à 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.

    Remarque

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

Liste de contrôle rapide pour la résolution des problèmes de connectivité

Remarque

Les sections suivantes vous aident à case activée rapidement pour les problèmes de connectivité. Consultez les rubriques individuelles pour connaître les étapes de dépannage détaillées.

Option 1

Si vous avez accès à la sortie de l’outil SQLCHECK mentionné dans la section Prérequis recommandés et passez en revue les informations contenues dans 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. Consultez les exemples suivants :

Section dans le fichier Texte à rechercher Action potentielle Peut aider à résoudre les problèmes (exemples)
Informations sur l’ordinateur Avertissement : Le pilote réseau est peut-être obsolète Recherchez en ligne de nouveaux pilotes. Diverses erreurs de connectivité
Informations sur la sécurité du client et le pilote Diffie-Hellman suites de chiffrement 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 aux serveurs 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 Le cas échéant, vérifiez que les alias sont correctement configurés et pointent vers le serveur et les adresses IP appropriés. A network-related or instance-specific error occurred while establishing a connection to 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 à un instance nommé, vérifiez SQL Server service Browser est démarré ou essayez de redémarrer le service de navigateur. A network-related or instance-specific error occurred while establishing a connection to 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 Approbation pour 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 Consultez ce tableau pour voir si les SPN de votre 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, etc. Vérifiez si TCP/IP est activé côté serveur et si votre instance SQL par défaut est à l’écoute sur 1433 ou sur un port différent. Diverses erreurs de connectivité

Option 2

Si vous n’êtes pas en mesure d’exécuter SQLCHECK sur votre ordinateur SQL Server, vous pouvez case activée les éléments suivants avant d’effectuer une résolution des problèmes en profondeur :

  1. Assurez-vous que SQL Server est démarré et que le message suivant s’affiche dans le journal des erreurs SQL Server :

    SQL Server est maintenant prêt pour les connexions clientes. Il s’agit d’un message d’information ; aucune action de l’utilisateur n’est requise.

    Utilisez la commande suivante dans PowerShell pour case activée l’status de SQL Server services 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 sur l’adresse IP et case activée pour toute anomalie : 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 consultant 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. Si cela fonctionne, il peut y avoir un problème avec le 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 êtes en mesure de vous connecter à SQL Server à partir d’autres systèmes clients et de 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 obtenir d’autres pointeurs. En outre, case activée si les pilotes réseau sont à jour.

  6. Si vous rencontrez des échecs de connexion, vérifiez qu’une connexion (principal du serveur) existe et qu’elle dispose CONNECT SQL des autorisations nécessaires 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 d’autorisations CONNECT 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 des problèmes liés à Kerberos, vous pouvez utiliser les scripts dans Déterminer si je suis connecté à SQL Server à l’aide de l’authentification Kerberos pour déterminer si Kerberos est correctement configuré sur vos serveurs SQL Server.

Problèmes de connectivité courants

Une fois que vous avez passé en revue les conditions préalables et la liste de contrôle, consultez problèmes de connectivité courants et sélectionnez le message d’erreur correspondant pour obtenir des étapes de résolution détaillées.