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.
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:
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.
Uaktualnij sterownik aplikacji do obsługiwanego sterownika.
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)