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
Rekommenderade förutsättningar
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:
Ladda ned den senaste versionen av SQLCHECK.
Packa upp den nedladdade filen i en mapp, till exempel C:\Temp.
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:
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."
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ändaTest-NetConnection
i PowerShell:$servername = "DestinationServer" Test-NetConnection -ComputerName $servername
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
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")
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.
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 harCONNECT
behörighet till databasen. Mer information om hur du beviljarCONNECT
behörigheter till databasens huvudnamn finns i BEVILJA databasbehörigheter. Mer information om hur du beviljarCONNECT 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 + "'")
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.