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 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 système à partir de SQL Server et des systèmes clients. Ces journaux peuvent vous aider à vérifier s’il existe des problèmes à l’échelle du système sur votre serveur 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 les journaux d’erreurs SQL Server pour rechercher 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.

    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 à rechercher rapidement 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 que vous 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. 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 SUR 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 le service SQL Server 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 SUR SQL Server Propriétés du compte de service de domaine Si vous configurez des serveurs liés à partir de votre serveur 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 SUR SQL Server SpN n’existe pas Consultez ce tableau pour voir si les SPN 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 SUR 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 é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 vérifier les éléments suivants avant d’effectuer une résolution détaillée des problèmes :

  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 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 sur l’adresse IP et vérifiez les anomalies : 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 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 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 ê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. Vérifiez également 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 d’accès à 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 Comment déterminer si le type d’authentification est Kerberos.

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.