Udostępnij za pośrednictwem


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

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 jest sporadyczny (występuje tylko czasami) czy 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ą problemy z całym systemem.

  • Jeśli połączenia z aplikacji kończą się niepowodzeniem, zbierz parametry połączenia z aplikacji. Te ciągi zwykle znajdują się w plikachWeb.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:

    1. Pobierz najnowszą wersję programu SQLCHECK.

    2. Rozpakuj pobrany plik do folderu, na przykład C:\Temp.

    3. Uruchom wiersz polecenia jako administrator, aby zebrać dane i zapisać je w pliku. Przykład: SQLCHECK > C:\Temp\server01.SQLCHECK.TXT.

    Uwaga

    Jeśli rozwiązujesz problemy z łącznością z klientem zdalnym lub rozwiązujesz problemy z połączonymi zapytaniami serwera, uruchom narzędzie SQLCHECK we wszystkich zaangażowanych systemach.

Szybka lista kontrolna rozwiązywania problemów z łącznością

Uwaga

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 SQL Server), skorzystaj z informacji, aby rozwiązać problemy przyczyniające się do problemu. Zobacz następujące 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 sieci 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 Diffie-Hellman zestawy szyfrowania 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 Błędy wymuszonego zamknięcia połączenia TLS w aplikacjach podczas nawiązywania połączenia z programem SQL Server 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 są obecne, upewnij się, że aliasy są prawidłowo skonfigurowane i wskazują poprawny 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 interesujące 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 została 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 domeny Jeśli skonfigurujesz serwery połączone z poziomu programu SQL Server, a wartość Trust for Del zostanie ustawiona na wartość false, mogą wystąpić problemy z uwierzytelnianiem związane z połączonymi zapytaniami serwera. 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 są prawidłowo skonfigurowane i rozwiązać zidentyfikowane problemy. Nie można wygenerować kontekstu SSPI
Informacje o programie SQL Server Szczegóły wystąpienia programu SQL Server Sprawdź wartości portów TCP Enabled, TCP i tak dalej. Sprawdź, czy protokół TCP/IP jest włączony po stronie serwera i czy 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ć programu SQLCHECK na komputerze z programem SQL Server, przed wykonaniem szczegółowego rozwiązywania problemów możesz sprawdzić następujące elementy:

  1. 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ć w pliku dziennika błędów określony ciąg "Program SQL Server jest teraz gotowy do połączeń klienckich. 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."
    
  2. Sprawdź podstawową łączność za pośrednictwem adresu IP i sprawdź wszelkie 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ć programu Test-NetConnection PowerShell:

    $servername = "DestinationServer"
    Test-NetConnection -ComputerName $servername
    
  3. 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
    
  4. Sprawdź, czy możesz nawiązać połączenie z programem SQL Server przy użyciu pliku UDL. Jeśli to zadziała, może wystąpić problem z parametrami 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")
    
  5. Sprawdź, czy możesz nawiązać połączenie z programem SQL Server z innych systemów klienckich i różnych identyfikatorów logowania użytkowników. Jeśli możesz to zrobić, problem może być specyficzny dla klienta lub logowania, w którym występuje problem. Sprawdź dzienniki zdarzeń systemu Windows na problematycznym kliencie, aby uzyskać więcej wskaźników. Sprawdź również, czy sterowniki sieciowe są aktualne.

  6. Jeśli występują błędy logowania, upewnij się, że istnieje identyfikator logowania (jednostka serwera) i że ma CONNECT SQL uprawnienia do programu SQL Server. Ponadto upewnij się, że domyślna baza danych przypisana do logowania jest poprawna i że zamapowana jednostka bazy danych ma CONNECT uprawnienia do bazy danych. Aby uzyskać więcej informacji na temat udzielania CONNECT uprawnień jednostce bazy danych, zobacz UDZIELANIE uprawnień bazy danych. Aby uzyskać więcej informacji na temat udzielania CONNECT SQL uprawnień jednostce serwera, zobacz UDZIELANIE uprawnień serwera. Użyj następującego skryptu, aby ułatwić identyfikację 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 + "'")
    
  7. Jeśli rozwiązujesz problemy związane z protokołem Kerberos, możesz użyć skryptów w sekcji How to determine if the authentication type is Kerberos (Jak ustalić, czy typ uwierzytelniania to Kerberos).

Typowe problemy z łącznością

Po zapoznaniu się z wymaganiami wstępnymi 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.