Udostępnij za pośrednictwem


Sporadyczne błędy połączenia występują podczas korzystania z narzędzia SQLCMD

Ten artykuł ułatwia rozwiązywanie sporadycznych problemów z połączeniem "Błąd systemu operacyjnego 10054", które występują podczas korzystania z narzędzia wiersza polecenia SQLCMD.

Błędy

Otrzymasz następujące ostrzeżenia i komunikaty o błędach:

OSTRZEŻENIE: proc_procname zwrócony 0x2746 HResult, poziom 16, stan 1

Dostawca TCP: istniejące połączenie zostało wymuszone przez hosta zdalnego.

SQLCMD.EXE: Sqlcmd: Błąd: Microsoft SQL Server Native Client 10.0 : Klient nie może nawiązać połączenia

Jedną z możliwych przyczyn tych błędów jest nieobsługiwany sterownik.

Pytania do rozważenia

Przejrzyj następujące scenariusze, aby ustalić, czy problem jest zgodny z twoim problemem:

  • Zbierasz ślad sieci i dowiadujesz się, że protokoły TLS 1.0 i 1.1 są wyłączone, a protokół TLS 1.2 jest włączony. Na serwerze z systemem SQL Server na serwerze aplikacji są włączone protokoły TLS 1.0, 1.1 i 1.2.

    Zrzut ekranu pokazujący, że protokoły TLS 1.0, 1.1 i 1.2 są włączone na serwerze aplikacji.

  • Test UDL jest uruchamiany na serwerze aplikacji przy użyciu dostawcy OLE DB firmy Microsoft dla SQL Server i dostawcy SNAC 11. Połączenie kończy się niepowodzeniem. Zostanie również wyświetlony komunikat informujący, że sterownik "Microsoft OLE DB Provider for SQL Server" jest przestarzały i nie obsługuje protokołu TLS 1.2.

  • Serwer aplikacji używa SQL Server Native Client 11 do pomyślnego przetestowania źródła danych ODBC. Jeśli SQL Server Native Client 10.0 nie jest obsługiwana, może zostać wyświetlony następujący komunikat o błędzie:

    Połączenie nie powiodło się ze stanem SQL: "08001" SQL Server Błąd: 10054 [Microsoft][SQL Server Native Client 10.0]Dostawca TCP: Istniejące połączenie zostało wymuszone przez hosta zdalnego. [Microsoft] [SQL Server Native Client 10.0] Klient nie może nawiązać połączenia.

    Ten komunikat może być wyświetlany, ponieważ serwer aplikacji używa starszej wersji algorytmu Diffie-Hellman (wersja 1), a SQL Server używa nowszej wersji (wersja 2). Ta niezgodność powoduje sporadyczne błędy protokołu TLS.

Rozwiązanie

Aby rozwiązać te problemy, wykonaj następujące kroki:

  1. W parametry połączenia określ SQL Server Native Client 11.

    Uwaga

    Firma Microsoft nie obsługuje już usługi SNAC 11. Jeśli podczas korzystania z usługi SNAC 11 wystąpią jakiekolwiek problemy, przed dostarczeniem pomocy technicznej należy przeprowadzić uaktualnienie do obsługiwanej wersji sterownika firmy Microsoft.

  2. Uaktualnij sterownik aplikacji do obsługiwanego sterownika.

  3. Jeśli nie używasz szyfrowania dla połączenia, użyj programu MSOLEDBSQL w wersji 18 lub ODBC w wersji 17. Jeśli używasz szyfrowania dla połączenia na serwerze aplikacji, użyj programu MSOLEDBSQL w wersji 19 lub ODBC w wersji 18. Domyślnie te sterowniki są uwzględniane razem z szyfrowaniem. Aby uzyskać więcej informacji, zapoznaj się z następującymi artykułami:

Zobacz też

Istniejące połączenie zostało wymuszone przez hosta zdalnego (błąd systemu operacyjnego 10054)