Zalecane wymagania wstępne i lista kontrolna rozwiązywania problemów z łącznością z programem SQL Server
Dotyczy: SQL Server
Oryginalny numer KB: 4009936
Zalecane wymagania wstępne
Aby skutecznie rozwiązywać problemy z łącznością, zbierz następujące informacje:
Tekst komunikatu o błędzie i kody błędów. Sprawdź, czy błąd występuje sporadycznie (występuje tylko czasami) lub spójny (występuje cały czas).
Dzienniki zdarzeń aplikacji i systemu z programu SQL Server i systemów klienckich. Te dzienniki mogą pomóc w sprawdzeniu, czy w programie SQL Server występują jakiekolwiek problemy dotyczące całego systemu.
Jeśli połączenia kończą się niepowodzeniem z aplikacji, zbierz parametry połączenia z aplikacji. Te ciągi są zwykle znajdowane w plikach Web.config dla aplikacji ASP.NET.
Zbierz i przejrzyj dzienniki błędów programu SQL Server pod kątem innych komunikatów o błędach i wyjątków.
Jeśli masz dostęp administratora do komputera z programem SQL Server, zbierz i przejrzyj bieżące ustawienia komputera i konta usług, korzystając z następującej procedury:
Pobierz najnowszą wersję narzędzia SQLCHECK.
Rozpakuj pobrany plik do folderu, na przykład C:\Temp.
Uruchom wiersz polecenia jako administrator, aby zebrać dane i zapisać je w pliku. Na przykład:
SQLCHECK > C:\Temp\server01.SQLCHECK.TXT
.
Uwaga 16.
Jeśli rozwiązujesz problemy z łącznością z klienta zdalnego lub rozwiązujesz problemy z zapytaniami serwera połączonego, uruchom narzędzie SQLCHECK we wszystkich zaangażowanych systemach.
Szybka lista kontrolna rozwiązywania problemów z łącznością
Uwaga 16.
Poniższe sekcje ułatwiają szybkie sprawdzanie problemów z łącznością. Przejrzyj poszczególne tematy, aby uzyskać szczegółowe kroki rozwiązywania problemów.
Opcja 1
Jeśli masz dostęp do danych wyjściowych narzędzia SQLCHECK wymienionego w sekcji Zalecane wymagania wstępne i przejrzyj informacje w różnych sekcjach w pliku wyjściowym (komputer, zabezpieczenia klienta i program SQL Server), skorzystaj z informacji, aby rozwiązać problemy związane z problemem. Zobacz poniższe przykłady:
Sekcja w pliku | Tekst do wyszukania | Potencjalna akcja | Może pomóc w rozwiązywaniu problemów (przykłady) |
---|---|---|---|
Informacje o komputerze | Ostrzeżenie: Sterownik sieciowy może być nieaktualny | Sprawdź w trybie online, czy nie ma nowych sterowników. | Różne błędy łączności |
Informacje o zabezpieczeniach i sterownikach klienta | Zestawy szyfrów Diffie-Hellman są włączone. Możliwe ryzyko sporadycznych awarii protokołu TLS, jeśli wersja algorytmu różni się między klientami i serwerami | Jeśli występują sporadyczne problemy z łącznością, zobacz Środowisko aplikacji wymuszające zamknięcie połączenia TLS podczas nawiązywania połączenia z serwerami SQL w systemie Windows. | Istniejące połączenie zostało przymusowo zamknięte przez zdalnego hosta |
Informacje o zabezpieczeniach i sterownikach klienta | Aliasy SQL | Jeśli istnieje, upewnij się, że aliasy są prawidłowo skonfigurowane i wskazują prawidłowy serwer i adresy IP. | Wystąpił błąd związany z siecią lub wystąpieniem podczas ustanawiania połączenia z programem SQL Server |
Informacje o programie SQL Server | Usługi zainteresowań | Jeśli usługa SQL nie została uruchomiona, uruchom ją. Jeśli masz problemy z nawiązywaniem połączenia z nazwanym wystąpieniem, upewnij się, że usługa SQL Server Browser jest uruchomiona lub spróbuj ponownie uruchomić usługę przeglądarki. | Wystąpił błąd związany z siecią lub wystąpieniem podczas ustanawiania połączenia z programem SQL Server |
Informacje o programie SQL Server | Właściwości konta usługi domenowej | Jeśli skonfigurujesz serwery połączone z programu SQL Server, a wartość Trust for Del ma wartość false, może wystąpić problem z uwierzytelnianiem zapytań serwera połączonego. | Rozwiązywanie problemów z błędami "Logowanie nie powiodło się dla użytkownika" |
Informacje o programie SQL Server | Nazwa SPN nie istnieje | Sprawdź tę tabelę, aby sprawdzić, czy nazwy SPN dla programu SQL Server zostały prawidłowo skonfigurowane i rozwiązane wszelkie zidentyfikowane problemy. | Nie można wygenerować kontekstu SSPI |
Informacje o programie SQL Server | Szczegóły dotyczące wystąpienia programu SQL Server | Sprawdź wartości włączone protokołu TCP, porty TCP itd. Sprawdź, czy protokół TCP/IP jest włączony po stronie serwera, a jeśli domyślne wystąpienie SQL nasłuchuje na 1433 lub innym porcie. | Różne błędy łączności |
Opcja 2
Jeśli nie możesz uruchomić narzędzia SQLCHECK na komputerze z programem SQL Server, przed wykonaniem szczegółowego rozwiązywania problemów możesz sprawdzić następujące elementy:
Upewnij się, że program SQL Server został uruchomiony i że w dzienniku błędów programu SQL Server zostanie wyświetlony następujący komunikat:
Program SQL Server jest teraz gotowy do obsługi połączeń klienckich. Jest to komunikat informacyjny; nie jest wymagana żadna akcja użytkownika.
Użyj następującego polecenia w programie PowerShell, aby sprawdzić stan usług programu SQL Server w systemie:
Get-Service | Where {$_.status -eq 'running' -and $_.DisplayName -match "sql server*"}
Użyj następującego polecenia, aby wyszukać plik dziennika błędów dla określonego ciągu "Program SQL Server jest teraz gotowy na połączenia klienckie. Jest to komunikat informacyjny; żadna akcja użytkownika nie jest wymagana.”:
Get-ChildItem -Path "c:\program files\microsoft sql server\mssql*" -Recurse -Include Errorlog |select-string "SQL Server is now ready for client connections."
Sprawdź podstawową łączność za pośrednictwem adresu IP i sprawdź, czy występują jakiekolwiek nieprawidłowości:
ping -a <SQL Server machine>, ping -a <SQL Server IP address>
. Jeśli zauważysz jakiekolwiek problemy, skontaktuj się z administratorem sieci. Alternatywnie można użyćTest-NetConnection
w programie PowerShell:$servername = "DestinationServer" Test-NetConnection -ComputerName $servername
Sprawdź, czy program SQL Server nasłuchuje na odpowiednich protokołach, przeglądając dziennik błędów:
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
Sprawdź, czy możesz nawiązać połączenie z programem SQL Server przy użyciu pliku UDL. Jeśli tak się stanie, może wystąpić problem z parametry połączenia. Aby uzyskać instrukcje dotyczące procedury testowania UDL, zobacz Testowanie łączności OLE DB z programem SQL Server przy użyciu pliku UDL. Alternatywnie możesz użyć następującego skryptu, aby utworzyć i uruchomić plik UDL-Test.udl (przechowywany w folderze %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")
Sprawdź, czy możesz nawiązać połączenie z programem SQL Server z innych systemów klienckich i różnych identyfikatorów logowania użytkownika. Jeśli możesz, problem może być specyficzny dla klienta lub identyfikatora logowania, którego dotyczy problem. Sprawdź dzienniki zdarzeń systemu Windows na problematycznym kliencie, aby uzyskać więcej wskaźników. Sprawdź również, czy sterowniki sieciowe są aktualne.
Jeśli występują błędy logowania, upewnij się, że istnieje identyfikator logowania (podmiot zabezpieczeń serwera) i ma
CONNECT SQL
uprawnienia do programu SQL Server. Ponadto upewnij się, że domyślna baza danych przypisana do logowania jest poprawna i że mapowana jednostka bazy danych maCONNECT
uprawnienia do bazy danych. Aby uzyskać więcej informacji na temat udzielaniaCONNECT
uprawnień jednostce bazy danych, zobacz GRANT Database Permissions (UDZIELANIE uprawnień do bazy danych). Aby uzyskać więcej informacji na temat udzielaniaCONNECT SQL
uprawnień jednostce serwera, zobacz GRANT Server Permissions (Udzielanie uprawnień serwera). Użyj następującego skryptu, aby ułatwić zidentyfikowanie tych uprawnień: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 + "'")
Jeśli rozwiązujesz problemy związane z protokołem Kerberos, możesz użyć skryptów w sekcji Jak określić, czy typ uwierzytelniania to Kerberos.
Typowe problemy z łącznością
Po przejściu przez wymagania wstępne i listę kontrolną zobacz typowe problemy z łącznością i wybierz odpowiedni komunikat o błędzie, aby uzyskać szczegółowe kroki rozwiązywania problemów.