Dela via


Rekommenderade förutsättningar och checklista för felsökning av anslutningsproblem med SQL Server

Gäller för: SQL Server
Ursprungligt 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. Dessa loggar kan hjälpa dig att kontrollera om det finns systemomfattande problem som inträffar på din SQL Server.

  • Om anslutningarna misslyckas från ett program samlar du in anslutningssträng 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. Exempel: SQLCHECK > C:\Temp\server01.SQLCHECK.TXT.

    Kommentar

    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

Kommentar

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

Alternativ 1

Om du har åtkomst till utdata från SQLCHECK-verktyget som nämns i avsnittet Rekommenderade förutsättningar 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 Kontrollera om det finns nya drivrutiner online. 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 Mer information om hur du stänger TLS-anslutningsfel när du ansluter 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 aliasen ä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 Om SQL-tjänsten inte har startats startar du den. 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 Ports 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å DIN SQL Server-dator kan du kontrollera följande objekt 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 statusen 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äng. Anvisningar om UDL-testproceduren finns i Testa OLE DB-anslutning 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 har tilldelats 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örhandskraven och checklistan kan du läsa vanliga anslutningsproblem och välja motsvarande felmeddelande för detaljerade felsökningssteg.