Rekommenderade krav och checklista för felsökning av anslutningsproblem med SQL Server

Gäller för: SQL Server
Original-KB-nummer: 4009936

Samla in följande information för att effektivt felsöka anslutningsproblem:

  • Texten i felmeddelandet och felkoderna. Kontrollera om felet är tillfälligt (inträffar bara ibland) eller konsekvent (inträffar hela tiden).

  • Program- och systemhändelseloggar från SQL Server och klientsystem. De här loggarna kan hjälpa dig att kontrollera om det finns systemomfattande problem på DIN SQL Server.

  • Om anslutningarna misslyckas från ett program samlar du in anslutningssträngarna från programmet. Dessa strängar finns vanligtvis i Web.config filer för ASP.NET program.

  • Samla in och granska SQL Server-felloggar för andra felmeddelanden och undantag.

  • Om du har administratörsåtkomst till SQL Server-datorn samlar du in och granskar aktuella datorinställningar och tjänstkonton med hjälp av följande procedur:

    1. Ladda ned den senaste versionen av SQLCHECK.

    2. Packa upp den nedladdade filen i en mapp, till exempel C:\Temp.

    3. Kör kommandotolken som administratör för att samla in data och spara dem i en fil. Till exempel: SQLCHECK > C:\Temp\server01.SQLCHECK.TXT.

    Obs!

    Om du felsöker anslutningsproblem från en fjärrklient eller felsöker länkade serverfrågor kör du SQLCHECK-verktyget på alla system som är inblandade.

Snabbchecklista för felsökning av anslutningsproblem

Obs!

Följande avsnitt hjälper dig att snabbt söka efter anslutningsproblem. Gå igenom enskilda avsnitt för detaljerade felsökningssteg.

Alternativ 1

Om du har åtkomst till utdata från SQLCHECK-verktyget som nämns i avsnittet Rekommenderade krav och granskar information i olika avsnitt i utdatafilen (dator, klientsäkerhet och SQL Server) använder du informationen för att åtgärda de problem som bidrar till problemet. Se följande exempel:

Avsnitt i filen Text att söka efter Potentiell åtgärd Kan hjälpa dig att felsöka (exempel)
Datorinformation Varning! Nätverksdrivrutinen kan vara inaktuell Sök online efter nya drivrutiner. Olika anslutningsfel
Information om klientsäkerhet och drivrutin Diffie-Hellman chiffersviter är aktiverade. Möjlig risk för tillfälliga TLS-fel om algoritmversionen skiljer sig mellan klienter och servrar Om du har tillfälliga anslutningsproblem kan du läsa Programupplevelse med två tvångsslutna TLS-anslutningsfel vid anslutning till SQL-servrar i Windows. En befintlig anslutning tvångsavslutades av fjärrvärden
Information om klientsäkerhet och drivrutin SQL-alias Om det finns ser du till att alias är korrekt konfigurerade och pekar på rätt server och IP-adresser. Ett nätverksrelaterat eller instansspecifikt fel inträffade när du skapar en anslutning till SQL Server
SQL Server-information Tjänster av intresse Starta sql-tjänsten om den inte har startats. Om du har problem med att ansluta till en namngiven instans kontrollerar du att SQL Server Browser-tjänsten har startats eller provar att starta om webbläsartjänsten. Ett nätverksrelaterat eller instansspecifikt fel inträffade när du skapar en anslutning till SQL Server
SQL Server-information Egenskaper för domäntjänstkonto Om du konfigurerar länkade servrar från din SQL Server och värdet Förtroende för del är inställt på false kan du stöta på autentiseringsproblem med dina länkade serverfrågor. Felsöka fel med "Inloggningen misslyckades för användaren"
SQL Server-information SPN finns inte Kontrollera den här tabellen för att se om SPN:er för SQL Server är korrekt konfigurerade och åtgärda eventuella problem som identifierats. Det går inte att generera SSPI-kontext
SQL Server-information Information om SQL Server-instans Kontrollera värdena för TCP Enabled, TCP-portar och så vidare. Granska om TCP/IP är aktiverat på serversidan och om SQL-standardinstansen lyssnar på 1433 eller en annan port. Olika anslutningsfel

Alternativ 2

Om du inte kan köra SQLCHECK på SQL Server-datorn kan du kontrollera följande innan du utför djupgående felsökning:

  1. Kontrollera att SQL Server har startats och att följande meddelande visas i SQL Server-felloggen:

    SQL Server är nu redo för klientanslutningar. Det här är ett informationsmeddelande. ingen användaråtgärd krävs.

    Använd följande kommando i PowerShell för att kontrollera status för SQL Server-tjänster i systemet:

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

    Använd följande kommando för att söka i felloggfilen efter den specifika strängen "SQL Server är nu redo för klientanslutningar. Det här är ett informationsmeddelande. Ingen användaråtgärd krävs.":

    Get-ChildItem -Path "c:\program files\microsoft sql server\mssql*" -Recurse -Include Errorlog |select-string "SQL Server is now ready for client connections."
    
  2. Kontrollera grundläggande anslutning via IP-adress och kontrollera eventuella avvikelser: ping -a <SQL Server machine>, ping -a <SQL Server IP address>. Om du märker några problem kan du kontakta nätverksadministratören. Du kan också använda Test-NetConnection i PowerShell:

    $servername = "DestinationServer"
    Test-NetConnection -ComputerName $servername
    
  3. Kontrollera om SQL Server lyssnar på lämpliga protokoll genom att granska felloggen:

     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. Kontrollera om du kan ansluta till SQL Server med hjälp av en UDL-fil. Om det fungerar kan det finnas ett problem med anslutningssträngen. Anvisningar om UDL-testproceduren finns i Testa OLE DB-anslutningen till SQL Server med hjälp av en UDL-fil. Alternativt kan du använda följande skript för att skapa och starta en UDL-Test.udl-fil (lagras i mappen %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. Kontrollera om du kan ansluta till SQL Server från andra klientsystem och olika användarinloggningar. Om du kan kan problemet vara specifikt för klienten eller inloggningen som har drabbats av problemet. Mer information finns i Windows-händelseloggarna på den problematiska klienten. Kontrollera också om nätverksdrivrutinerna är uppdaterade.

  6. Om du har inloggningsfel kontrollerar du att det finns en inloggning (serverhuvudnamn) och att den har CONNECT SQL behörighet till SQL Server. Kontrollera dessutom att standarddatabasen som är tilldelad till inloggningen är korrekt och att det mappade databasobjektet har CONNECT behörighet till databasen. Mer information om hur du beviljar CONNECT behörigheter till databasens huvudnamn finns i BEVILJA databasbehörigheter. Mer information om hur du beviljar CONNECT SQL behörigheter till serverns huvudnamn finns i BEVILJA serverbehörigheter. Använd följande skript för att identifiera dessa behörigheter:

    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. Om du felsöker Kerberos-relaterade problem kan du använda skripten i Så här avgör du om autentiseringstypen är Kerberos.

Vanliga anslutningsproblem

När du har gått igenom förutsättningarna och checklistan kan du läsa vanliga anslutningsproblem och välja motsvarande felmeddelande för detaljerade felsökningssteg.