Udostępnij za pośrednictwem


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

Ten artykuł pomaga rozwiązać sporadyczne problemy z połączeniem "Błąd systemu operacyjnego 10054", które występują podczas korzystania z narzędzia wiersza polecenia SQLCMD.

Błędy

Wyświetlane są następujące komunikaty ostrzegawcze i błędy:

OSTRZEŻENIE: proc_procname zwrócił 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

Zapoznaj się z następującymi scenariuszami, aby określić, czy jakikolwiek problem jest zgodny:

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

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

  • Test UDL można uruchomić na serwerze aplikacji przy użyciu zarówno dostawcy Microsoft OLE DB dla programu SQL Server, jak 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 klienta SQL Server Native Client 11 do pomyślnego przetestowania źródła danych ODBC. Jeśli program SQL Server Native Client 10.0 nie jest obsługiwany, może zostać wyświetlony następujący komunikat o błędzie:

    Połączenie nie powiodło się z powodu błędu SQL State: "08001" SQL Server Error: 10054 [Microsoft][SQL Server Native Client 10.0]TCP Provider: 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 (v1), a program 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. Określ program SQL Server Native Client 11 w parametry połączenia.

    Uwaga 16.

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

  2. Uaktualnij sterownik aplikacji do obsługiwanego sterownika.

  3. Użyj programu MSOLEDBSQL w wersji 18 lub ODBC w wersji 17, jeśli nie używasz szyfrowania dla połączenia. 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ą dołączane razem z szyfrowaniem. Aby uzyskać więcej informacji, zobacz następujące artykuły:

Zobacz też

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