Aanbevolen vereisten en controlelijst voor het oplossen van verbindingsproblemen met SQL Server
Van toepassing op: SQL Server
Oorspronkelijk KB-nummer: 4009936
Aanbevolen vereisten
Verzamel de volgende informatie om effectief verbindingsproblemen op te lossen:
De tekst van het foutbericht en de foutcodes. Controleer of de fout onregelmatig is (alleen soms optreedt) of consistent (gebeurt altijd).
Toepassings- en systeemlogboeken van SQL Server- en clientsystemen. Deze logboeken kunnen helpen controleren of er problemen zijn met het hele systeem op uw SQL Server.
Als de verbindingen mislukken vanuit een toepassing, verzamelt u de verbindingsreeks s van de toepassing. Deze tekenreeksen worden meestal gevonden in Web.config-bestanden voor ASP.NET toepassingen.
Verzamel en bekijk SQL Server-foutenlogboeken voor andere foutberichten en uitzonderingen.
Als u beheerderstoegang tot de SQL Server-computer hebt, verzamelt en controleert u de huidige computerinstellingen en -serviceaccounts met behulp van de volgende procedure:
Download de nieuwste versie van SQLCHECK.
Pak het gedownloade bestand uit in een map, bijvoorbeeld C:\Temp.
Voer de opdrachtprompt uit als beheerder om de gegevens te verzamelen en op te slaan in een bestand. Voorbeeld:
SQLCHECK > C:\Temp\server01.SQLCHECK.TXT
.
Notitie
Als u verbindingsproblemen van een externe client of problemen met gekoppelde serverquery's wilt oplossen, voert u het hulpprogramma SQLCHECK uit op alle betrokken systemen.
Snelle controlelijst voor het oplossen van verbindingsproblemen
Notitie
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) bekijkt, gebruikt u de informatie om de problemen op te lossen die bijdragen aan uw probleem. Zie de volgende voorbeelden:
Sectie in het bestand | Tekst om naar te zoeken | Mogelijke actie | Kan helpen bij het oplossen van problemen (voorbeelden) |
---|---|---|---|
Computergegevens | Waarschuwing: netwerkstuurprogramma is mogelijk verouderd | Controleer online op nieuwe stuurprogramma's. | Verschillende connectiviteitsfouten |
Clientbeveiligings- en stuurprogrammagegevens | Diffie-Hellman-coderingssuites zijn ingeschakeld. Mogelijk risico op onregelmatige TLS-fouten als de algoritmeversie verschilt tussen clients en servers | Als u onregelmatige verbindingsproblemen ondervindt, raadpleegt u toepassingen 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 | Als deze aanwezig zijn, moet u ervoor zorgen dat aliassen correct 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-gegevens | Diensten van belang | Als uw SQL-service niet is gestart, start u deze. Als u problemen ondervindt met het maken van verbinding met een benoemd exemplaar, controleert u of de SQL Server Browser-service is gestart of start u de browserservice opnieuw. | Er is een netwerkgerelateerde of instantiespecifieke fout opgetreden tijdens het tot stand brengen van een verbinding met SQL Server |
SQL Server-gegevens | Eigenschappen van domeinserviceaccount | Als u gekoppelde servers van uw SQL Server configureert 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-gegevens | SPN bestaat niet | Controleer deze tabel om te zien of SPN's voor uw SQL Server correct zijn geconfigureerd en los eventuele geïdentificeerde problemen op. | Kan geen SSPI-context genereren |
SQL Server-gegevens | 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:
Zorg ervoor dat SQL Server is gestart en dat u het volgende bericht ziet in het foutenlogboek van SQL Server:
SQL Server is nu gereed voor clientverbindingen. Dit is een informatiebericht; er is geen actie van de gebruiker 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 te zoeken in het foutenlogboekbestand voor 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."
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 de netwerkbeheerder. U kunt ook in PowerShell het volgende gebruikenTest-NetConnection
:$servername = "DestinationServer" Test-NetConnection -ComputerName $servername
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
Controleer of u verbinding kunt maken met SQL Server met behulp van een UDL-bestand. Als dit werkt, kan er een probleem zijn met de verbindingsreeks. Zie OLE DB-connectiviteit met SQL Server testen 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")
Controleer of u vanuit andere clientsystemen verbinding kunt maken met SQL Server en andere aanmeldingen van gebruikers. Als u dat kunt, 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.
Als u aanmeldingsfouten ondervindt, moet u ervoor zorgen dat er een aanmelding (server-principal) bestaat en dat deze machtigingen heeft
CONNECT SQL
voor SQL Server. Zorg er bovendien voor dat de standaarddatabase die is toegewezen aan de aanmelding juist is en dat de toegewezen database-principal machtigingen heeftCONNECT
voor de database. Zie MACHTIGINGEN VERLENEN voor databasemachtigingen voor meer informatie over het verlenenCONNECT
van machtigingen aan de database-principal. Zie GRANT Server-machtigingen voor meer informatie over het verlenenCONNECT 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 + "'")
Als u problemen met Betrekking tot Kerberos wilt oplossen, kunt u de scripts op How to determine of het verificatietype Kerberos is.
Veelvoorkomende connectiviteitsproblemen
Wanneer u de vereisten en controlelijst hebt doorlopen, raadpleegt u veelvoorkomende verbindingsproblemen en selecteert u het bijbehorende foutbericht voor gedetailleerde stappen voor probleemoplossing.