Condividi tramite


Si verificano errori di connessione intermittenti quando si usa l'utilità SQLCMD

Questo articolo illustra come risolvere i problemi di connessione intermittente "Errore del sistema operativo 10054" che si verificano quando si usa lo strumento da riga di comando SQLCMD.

Errori

Vengono visualizzati i messaggi di avviso e di errore seguenti:

AVVISO: proc_procname restituito HResult 0x2746, Livello 16, Stato 1

Provider TCP: una connessione esistente è stata chiusa forzatamente dall'host remoto.

SQLCMD.EXE : Sqlcmd: Errore: Microsoft SQL Server Native Client 10.0 : Client non è in grado di stabilire la connessione

Una possibile causa di questi errori è un driver non supportato.

Fattori da considerare

Esaminare gli scenari seguenti per determinare se esiste una corrispondenza con il problema:

  • Si raccoglie una traccia di rete e si apprende che TLS 1.0 e 1.1 sono disabilitati e TLS 1.2 è abilitato. Nel server che esegue SQL Server, TLS 1.0, 1.1 e 1.2 sono abilitati nel server applicazioni.

    Screenshot che mostra che TLS 1.0, 1.1 e 1.2 sono abilitati nel server applicazioni.

  • Eseguire un test UDL nel server applicazioni usando sia il provider Microsoft OLE DB per SQL Server che il provider SNAC 11. La connessione non riesce. Viene visualizzato anche un messaggio che indica che il driver "Provider Microsoft OLE DB per SQL Server" è deprecato e non supporta TLS 1.2.

  • Il server applicazioni usa SQL Server Native Client 11 per testare correttamente l'origine dati ODBC. Se SQL Server Native Client 10.0 non è supportato, potrebbe essere visualizzato il messaggio di errore seguente:

    La connessione non è riuscita con lo stato SQL: '08001' Errore di SQL Server: 10054 [Microsoft][SQL Server Native Client 10.0]Provider TCP: una connessione esistente è stata chiusa forzatamente dall'host remoto. [Microsoft][SQL Server Native Client 10.0] Il client non è in grado di stabilire la connessione.

    Questo messaggio potrebbe essere visualizzato perché il server applicazioni usa la versione precedente dell'algoritmo Diffie-Hellman (v1) e SQL Server usa la versione più recente (v2). Questa mancata corrispondenza causa errori TLS intermittenti.

Risoluzione

Per risolvere questi problemi, seguire questa procedura:

  1. Specificare SQL Server Native Client 11 nel stringa di connessione.

    Note

    Microsoft non supporta più SNAC 11. Se si verificano problemi durante l'uso di SNAC 11, è necessario eseguire l'aggiornamento a una versione supportata del driver Microsoft prima di poter fornire il supporto tecnico.

  2. Aggiornare il driver dell'applicazione a un driver supportato.

  3. Usare MSOLEDBSQL v18 o ODBC v17 se non si usa la crittografia per la connessione. Se si usa la crittografia per la connessione nel server applicazioni, usare MSOLEDBSQL v19 o ODBC v18. Per impostazione predefinita, questi driver vengono inclusi insieme alla crittografia. Per altre informazioni, vedere gli articoli seguenti:

Vedi anche

Una connessione esistente è stata chiusa forzatamente dall'host remoto (errore del sistema operativo 10054)