Aanbevolen vereisten en controlelijst voor het oplossen van verbindingsproblemen met SQL Server

Van toepassing op: SQL Server
Origineel KB-nummer: 4009936

Verzamel de volgende informatie om verbindingsproblemen effectief op te lossen:

  • De tekst van het foutbericht en de foutcodes. Controleer of de fout onregelmatig is (treedt slechts soms op) of consistent is (treedt de hele tijd op).

  • Toepassings- en systeem gebeurtenislogboeken van SQL Server- en clientsystemen. Met deze logboeken kunt u controleren of er systeembrede problemen optreden op uw SQL Server.

  • Als de verbindingen mislukken vanuit een toepassing, verzamelt u de verbindingsreeksen van de toepassing. Deze tekenreeksen bevinden zich meestal in Web.config bestanden voor ASP.NET toepassingen.

  • Verzamel en controleer SQL Server foutenlogboeken voor andere foutberichten en uitzonderingen.

  • Als u beheerderstoegang hebt tot de SQL Server computer, verzamelt en controleert u de huidige computerinstellingen en serviceaccounts met behulp van de volgende procedure:

    1. Download de nieuwste versie van SQLCHECK.

    2. Pak het gedownloade bestand uit in een map, bijvoorbeeld C:\Temp.

    3. Voer de opdrachtprompt uit als beheerder om de gegevens te verzamelen en op te slaan in een bestand. Bijvoorbeeld: SQLCHECK > C:\Temp\server01.SQLCHECK.TXT.

    Opmerking

    Als u verbindingsproblemen vanaf een externe client of gekoppelde serverquery's wilt oplossen, voert u het hulpprogramma SQLCHECK uit op alle betrokken systemen.

Snelle controlelijst voor het oplossen van verbindingsproblemen

Opmerking

In de volgende secties kunt u snel controleren op verbindingsproblemen. Bekijk afzonderlijke onderwerpen voor gedetailleerde stappen voor probleemoplossing.

Optie 1

Als u toegang hebt tot de uitvoer van het hulpprogramma SQLCHECK dat wordt vermeld in de sectie Aanbevolen vereisten en informatie in verschillende secties in het uitvoerbestand (Computer, Clientbeveiliging en SQL Server), gebruikt u de informatie om de problemen op te lossen die bijdragen aan uw probleem. Bekijk de volgende voorbeelden:

Sectie in het bestand Tekst om naar te zoeken Mogelijke actie Kan helpen bij het oplossen van problemen (voorbeelden)
Computergegevens Waarschuwing: het netwerkstuurprogramma is mogelijk verouderd Controleer online op nieuwe stuurprogramma's. Verschillende connectiviteitsfouten
Clientbeveiligings- en stuurprogrammagegevens Diffie-Hellman coderingssuites zijn ingeschakeld. Mogelijk risico van onregelmatige TLS-fouten als de algoritmeversie verschilt tussen clients en servers Als u af en toe verbindingsproblemen ondervindt, raadpleegt u Toepassingen ondervinden geforceerd gesloten TLS-verbindingsfouten bij het maken van verbinding met SQL-servers in Windows. Een bestaande verbinding is geforceerd gesloten door de externe host
Clientbeveiligings- en stuurprogrammagegevens SQL-aliassen Indien aanwezig, controleert u of aliassen juist zijn geconfigureerd en verwijzen naar de juiste server en IP-adressen. Er is een netwerkgerelateerde of instantiespecifieke fout opgetreden tijdens het tot stand brengen van een verbinding met SQL Server
SQL Server informatie Services of Interest Als uw SQL-service niet is gestart, start u deze. Als u problemen ondervindt bij het maken van verbinding met een benoemd exemplaar, controleert u SQL Server Browser-service is gestart of start u de browserservice opnieuw op. Er is een netwerkgerelateerde of instantiespecifieke fout opgetreden tijdens het tot stand brengen van een verbinding met SQL Server
SQL Server informatie Eigenschappen van domeinserviceaccount Als u gekoppelde servers configureert vanuit uw SQL Server en de waarde Vertrouwen voor Del is ingesteld op onwaar, kunt u verificatieproblemen ondervinden met uw gekoppelde serverquery's. Problemen met 'Aanmelden mislukt voor gebruiker' oplossen
SQL Server informatie SPN bestaat niet Controleer deze tabel om te zien of SPN's voor uw SQL Server juist zijn geconfigureerd en om geïdentificeerde problemen op te lossen. Kan geen SSPI-context genereren
SQL Server informatie Details voor SQL Server exemplaar Controleer de waarden van TCP ingeschakeld, TCP-poorten, enzovoort. Controleer of TCP/IP is ingeschakeld aan de serverzijde en of uw SQL-standaardexemplaren luisteren op 1433 of een andere poort. Verschillende connectiviteitsfouten

Optie 2

Als u SQLCHECK niet kunt uitvoeren op uw SQL Server computer, kunt u de volgende items controleren voordat u uitgebreide probleemoplossing uitvoert:

  1. Zorg ervoor dat SQL Server is gestart en dat u het volgende bericht ziet in het SQL Server foutenlogboek:

    SQL Server is nu gereed voor clientverbindingen. Dit is een informatieve boodschap; er is geen gebruikersactie vereist.

    Gebruik de volgende opdracht in PowerShell om de status van SQL Server services op het systeem te controleren:

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

    Gebruik de volgende opdracht om in het foutenlogboekbestand te zoeken naar de specifieke tekenreeks 'SQL Server is nu gereed voor clientverbindingen. Dit is een informatieve boodschap; er is geen gebruikersactie vereist':

    Get-ChildItem -Path "c:\program files\microsoft sql server\mssql*" -Recurse -Include Errorlog |select-string "SQL Server is now ready for client connections."
    
  2. Controleer de basisconnectiviteit via IP-adres en controleer op eventuele afwijkingen: ping -a <SQL Server machine>, ping -a <SQL Server IP address>. Als u problemen ondervindt, neem dan contact op met uw netwerkbeheerder. U kunt ook in PowerShell gebruiken Test-NetConnection :

    $servername = "DestinationServer"
    Test-NetConnection -ComputerName $servername
    
  3. Controleer of SQL Server luistert op de juiste protocollen door het foutenlogboek te bekijken:

     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. Controleer of u verbinding kunt maken met SQL Server met behulp van een UDL-bestand. Als dit werkt, is er mogelijk een probleem met de verbindingsreeks. Zie OLE DB-connectiviteit testen met SQL Server met behulp van een UDL-bestand voor instructies over de UDL-testprocedure. U kunt ook het volgende script gebruiken om een UDL-Test.udl-bestand te maken en te starten (opgeslagen in de map %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. Controleer of u verbinding kunt maken met SQL Server van andere clientsystemen en verschillende gebruikersaanmeldingen. Als dit lukt, kan het probleem specifiek zijn voor de client of aanmelding die het probleem ondervindt. Controleer de Windows-gebeurtenislogboeken op de problematische client voor meer aanwijzers. Controleer ook of netwerkstuurprogramma's up-to-date zijn.

  6. Als u aanmeldingsfouten ondervindt, controleert u of er een aanmelding (server-principal) bestaat en of deze machtigingen heeft CONNECT SQL om te SQL Server. Zorg er bovendien voor dat de standaarddatabase die is toegewezen aan de aanmelding juist is en of de toegewezen database-principal machtigingen heeft CONNECT voor de database. Zie Machtigingen voor databases verlenen voor meer informatie over het verlenen CONNECT van machtigingen aan de database-principal. Zie Servermachtigingen verlenen voor meer informatie over het verlenen CONNECT SQL van machtigingen aan de server-principal. Gebruik het volgende script om deze machtigingen te identificeren:

    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. Als u kerberos-gerelateerde problemen wilt oplossen, kunt u de scripts in Bepalen of ik verbonden ben met SQL Server kerberos-verificatie gebruiken om te bepalen of Kerberos juist is geconfigureerd op uw SQL-servers.

Veelvoorkomende verbindingsproblemen

Wanneer u de vereisten en controlelijst hebt doorlopen, raadpleegt u veelvoorkomende verbindingsproblemen en selecteert u het bijbehorende foutbericht voor gedetailleerde stappen voor probleemoplossing.