Si è verificato un errore di rete o specifico dell'istanza durante la connessione a SQL Server
Si applica a: SQL Server
Quando ci si connette a un'istanza di SQL Server, è possibile che vengano visualizzati uno o più dei messaggi di errore seguenti. Questo articolo illustra alcune procedure che consentono di risolvere questi errori, forniti in ordine di problemi da semplici a complessi.
Messaggi di errore
I messaggi di errore completi variano a seconda della libreria client usata nell'applicazione e nell'ambiente server. Per verificare se viene visualizzato uno dei messaggi di errore seguenti, è possibile controllare i dettagli seguenti:
"Si è verificato un errore di rete o specifico dell'istanza mentre si cercava di stabilire una connessione con SQL Server. Verificare che il nome dell'istanza sia corretto e che SQL Server sia configurato per consentire connessioni remote"
provider: Provider Named Pipes, errore: 40 - Impossibile aprire una connessione a SQL Server (Microsoft SQL Server, Errore: 53)
Si è verificato un errore di rete o specifico dell'istanza mentre veniva stabilita la connessione a SQL Server. Il server non è stato trovato o non è accessibile. Verificare che il nome dell'istanza sia corretto e che il server sia configurato in modo da consentire connessioni remote.provider: Provider Named Pipes, errore: 40 - Impossibile aprire una connessione a SQL Server (Microsoft SQL Server, errore: 53)
provider: provider TCP, errore: 0 - Host sconosciuto. (Microsoft SQL Server, Errore: 11001)
provider: Interfacce di rete SQL, errore: 26 - Errore durante l'individuazione del server o dell'istanza specificata
Si è verificato un errore di rete o specifico dell'istanza mentre veniva stabilita la connessione a SQL Server. Il server non è stato trovato o non è accessibile. Verificare che il nome dell'istanza sia corretto e che il server sia configurato in modo da consentire connessioni remote.provider: Interfacce di rete SQL, errore: 26 - Errore durante l'individuazione del server o dell'istanza specificata
Timeout di accesso scaduto
Errore di collegamento dati di SQL Server Native Client[Microsoft SQL Server Native Client 10.0]: timeout di accesso scaduto
[Microsoft SQL Server Native Client 10.0]: si è verificato un errore specifico della rete o dell'istanza durante la connessione a SQL Server. Server non trovato o non accessibile. Verificare che il nome dell'istanza sia corretto e che il server sia configurato in modo da consentire connessioni remote. Per maggiori informazioni, consultare la documentazione online di SQL Server.
[Microsoft SQL Server Native Client 10.0]: Interfacce di rete di SQL Server: Errore di individuazione server/istanza specificata [xFFFFFFFF].
Impossibile stabilire la connessione. Risposta non corretta della parte connessa dopo un intervallo di tempo oppure mancata risposta dall'host collegato
Si è verificato un errore di rete o specifico dell'istanza mentre veniva stabilita la connessione a SQL Server. Il server non è stato trovato o non è accessibile. Verificare che il nome dell'istanza sia corretto e che il server sia configurato in modo da consentire connessioni remote.provider: provider TCP, errore: 0
Non è possibile stabilire la connessione. Risposta non corretta della parte connessa dopo un intervallo di tempo oppure mancata risposta dall'host collegato.
Microsoft SQL Server, Errore: 10060
provider: Provider Named Pipes, errore: 40 - Impossibile aprire una connessione a SQL Server
Si è verificato un errore di rete o specifico dell'istanza mentre veniva stabilita la connessione a SQL Server. Il server non è stato trovato o non è accessibile. Verificare che il nome dell'istanza sia corretto e che il server sia configurato in modo da consentire connessioni remote.provider: Provider Named Pipes, errore: 40 - Impossibile aprire una connessione a SQL Server
Microsoft SQL Server, Errore: 53
Impossibile trovare il percorso di rete
[Microsoft][SQL Server Native Client 11.0]Provider TCP: non è stato possibile stabilire alcuna connessione perché il computer di destinazione l'ha rifiutata attivamente
Errore di collegamento dati di SQL Server Native Client[Microsoft] [SQL Server Native Client 11.0] Provider TCP: Impossibile stabilire una connessione perché il computer di destinazione l'ha rifiutata attivamente.
[Microsoft] [SQL Server Native Client 11.0] Timeout dell'accesso scaduto.
[Microsoft][SQL Server Native Client 11.0] Si è verificato un errore correlato alla rete o specifico dell'istanza durante la connessione a SQL Server. Server non trovato o non accessibile. Verificare che il nome dell'istanza sia corretto e che il server sia configurato in modo da consentire connessioni remote. Per maggiori informazioni, consultare la documentazione online di SQL Server.
"SQL Server non esiste o accesso negato"
Generalmente questo errore indica che il client non riesce a trovare l'istanza di SQL Server. Questo problema si verifica per uno dei seguenti motivi:
- Il nome del computer che ospita SQL Server non è corretto.
- L'istanza non riesce a determinare l'IP corretto.
- Il numero di porta TCP non è stato specificato correttamente.
Note
Per la risoluzione dei problemi di connettività in scenari di alta disponibilità, consultare i seguenti articoli:
Errore di Windows 233: Nessun processo si trova sull'altra estremità della pipe
Il messaggio completo è:
È stata stabilita una connessione con il server, ma si è verificato un errore durante il processo di accesso. (provider: provider memoria condivisa, errore: 0 - Nessun altro processo all'altra estremità della pipe.) (Microsoft SQL Server, Errore: 233)
Questo messaggio indica che SQL Server non è in ascolto sul protocollo Shared Memory o Named Pipes.
Raccogliere informazioni per la risoluzione dell'errore
È consigliabile raccogliere le informazioni elencate in questa sezione usando una delle opzioni seguenti prima di procedere con i passaggi effettivi per risolvere l'errore.
Opzione 1: usare lo strumento SQL Check per raccogliere le informazioni necessarie
Se è possibile accedere localmente al computer SQL Server e avere accesso come amministratore, usare SQLCHECK. Questo strumento fornisce la maggior parte delle informazioni necessarie per la risoluzione dei problemi in un unico file. Per ulteriori informazioni sull'uso dello strumento e sulle informazioni raccolte, consultare la pagina iniziale dello strumento. È anche possibile controllare i prerequisiti consigliati e la pagina dell'elenco di controllo.
Opzione 2: raccogliere i dati singolarmente usando le procedure seguenti
Ottenere il nome dell'istanza da Gestione configurazione
Nel server che ospita l'istanza di SQL Server, usare Gestione configurazione SQL Server per verificare il nome dell'istanza:
Note
Gestione configurazione viene installata automaticamente nel computer quando viene installato SQL Server. Le istruzioni per iniziare Gestione configurazione variano leggermente in base alle versioni di SQL Server e Windows. Per informazioni dettagliate specifiche della versione, vedere Gestione configurazione SQL Server.
Accedere al computer che ospita l'istanza di SQL Server.
Avviare Gestione configurazione SQL Server.
Nel riquadro sinistro selezionare Servizi di SQL Server.
Nel riquadro a destra, verificare il nome dell'istanza del motore di database.
- SQL SERVER (MSSQLSERVER) indica un'istanza predefinita di SQL Server. Il nome dell'istanza predefinita è <il nome> del computer.
- SQL SERVER (<nome> istanza) indica un'istanza denominata di SQL Server. Il nome dell'istanza denominata è <nome> computer\<nome> istanza.
Ottenere l'indirizzo IP del server
È possibile utilizzare i seguenti passaggi per ottenere l'indirizzo IP del computer che ospita l'istanza di SQL Server.
Nel menu Start selezionare Esegui. Nella casella Esegui, digitare cmd, quindi fare clic su OK.
Nella finestra Prompt dei comandi, digitare ipconfig/all, quindi premere INVIO. Annotare l'indirizzo IPv4 e l'indirizzo IPv6.
Note
SQL Server può connettersi utilizzando il protocollo IP versione 4 o il protocollo IP versione 6. La rete può consentirne uno o entrambi.
Ottenere la porta TCP dell'istanza
Nella maggior parte dei casi, la connessione al motore di database su un altro computer avviene tramite il protocollo TCP. Per ottenere la porta TCP dell'istanza, procedere come segue:
Utilizzare SQL Server Management Studio sul computer che esegue SQL Server e collegarsi all'istanza di SQL Server. In Esplora oggetti, espandere Gestione, espandere Registro SQL Server, quindi fare clic con il pulsante destro del mouse sul registro attuale.
In Visualizzatore file registro, selezionare Filtra sulla barra degli strumenti. Nella casella Messaggio contenente testo, digitare server in ascolto su, selezionare Applica filtro, quindi selezionare OK.
Deve essere elencato un messaggio simile a "Server in ascolto su [ 'any' <ipv4> 1433]".
Questo messaggio indica che l'istanza di SQL Server è in ascolto su tutti gli indirizzi IP del computer (per IP versione 4) e sulla porta TCP 1433. La porta TCP 1433 è in genere la porta usata dal motore di database o dall'istanza predefinita di SQL Server. Solo un'istanza di SQL Server può usare questa porta. Se è installata più di un'istanza di SQL Server, alcune istanze devono usare altri numeri di porta. Prendere nota del numero di porta usato dall'istanza di SQL Server a cui si sta tentando di connettersi.
Note
- L'indirizzo IP 127.0.0.1 è probabilmente presente nell'elenco. Si chiama indirizzo dell'adattatore di loopback. Solo i processi sullo stesso computer possono utilizzare l'indirizzo IP per connettersi.
- È inoltre possibile visualizzare il registro degli errori di SQL Server utilizzando un editor di testo. Per impostazione predefinita, il log degli errori si trova in Programmi\Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOG e nei file ERRORLOG.n. Per maggiori informazioni, consultare Visualizzare il registro errori di SQL Server.
Passaggio 1: verificare che l'istanza sia in esecuzione
Opzione 1: Usare il file di output SQLCHECK
- Cercare il file di output SQLCHECK per "Informazioni su SQL Server".
- Nella sezione intitolata "Servizi di interesse", individuare l'istanza di SQL Server nelle colonne Nome e Istanza (per le istanze denominate) e controllarne lo stato utilizzando la colonna Avviata. Se il valore è True, i servizi vengono avviati. In caso contrario, il servizio non è attualmente in esecuzione.
- Se il servizio non è in esecuzione, avviare il servizio utilizzando SQL Server Management Studio, SQL Server Configuration Manager, PowerShell o l'applet Services.
Opzione 2: utilizzare lo strumento Gestione configurazione SQL Server
Per verificare che l'istanza sia in esecuzione, selezionare SQL Server Services in Gestione configurazione SQL Server e controllare il simbolo dall'istanza di SQL Server.
- Una freccia verde indica che un'istanza è in esecuzione.
- Un quadrato rosso indica che un'istanza è stata arrestata.
Se l'istanza è stata arrestata, fare clic con il pulsante destro del mouse sull'istanza e scegliere Avvia. Viene quindi avviata l'istanza del server e l'indicatore diventa una freccia verde.
Opzione 3: utilizzare i comandi di PowerShell
Per controllare lo stato dei servizi SQL Server nel sistema, in PowerShell è possibile utilizzare il comando seguente:
Get-Service | Where {$_.status -eq 'running' -and $_.DisplayName -like "sql server*"}
Per cercare nel file del registro degli errori la stringa specifica "SQL Server è ora pronto per le connessioni client", è possibile utilizzare il comando seguente. Si tratta di un messaggio informativo; non è richiesta alcuna azione da parte dell'utente.":
Get-ChildItem -Path "c:\program files\microsoft sql server\mssql*" -Recurse -Include Errorlog | Select-String "SQL Server is now ready for client connections."
Passaggio 2: verificare che il servizio SQL Server Browser sia in esecuzione
Note
Questo passaggio è necessario solo per la risoluzione dei problemi di connettività con le istanze denominate.
Opzione 1: Usare il file di output SQLCHECK
- Cercare il file di output SQLCHECK per "Informazioni su SQL Server".
- Nella sezione "Servizi di interesse", cercare SQLBrowser nella colonna Nome e controllarne lo stato utilizzando la colonna Avviato. Se il valore è True, il servizio viene avviato. In caso contrario, il servizio non è attualmente in esecuzione ed è necessario avviarlo. Per maggiori informazioni, consultare Avviare, arrestare, sospendere, riprendere, riavviare i servizi di SQL Server.
Opzione 2: utilizzare lo strumento Gestione configurazione SQL Server
Per connettersi a un'istanza denominata, il servizio SQL Server Browser deve essere in esecuzione. In Gestione configurazione SQL Server, individuare il servizio SQL Server Browser e verificare che sia in esecuzione. Se non è in esecuzione, avviare il servizio. Il servizio SQL Server Browser non è necessario per le istanze predefinite.
Per maggiori informazioni sull'utilizzo del servizio SQL Server Browser nell'ambiente, consultare Servizio SQL Server Browser.
Per maggiori informazioni sull'arresto e l'avvio di SQL Services, consultare Avviare, arrestare, sospendere, riprendere, riavviare i servizi di SQL Server.
Note
Se il servizio SQL Server Browser non è in esecuzione nell'ambiente, consultare Connessione a un'istanza denominata di SQL Server senza il servizio SQL Server Browser.
Passaggio 3: verificare il nome del server nella stringa di connessione
Quando nella stringa di connessione viene specificato un nome di server non corretto, spesso si verificano errori. Assicurarsi che il nome del server corrisponda a quello recuperato nei passaggi precedenti.
Note
Se si usa lo strumento SQLCHECK, esaminare i valori NetBios Name/FQDN nella sezione Informazioni computer del file di output.
- Per esempi sulle stringhe di connessione, consultare Stringhe di connessione di SQL Server.
- Per esempi più dettagliati, consultare Modello di verifica della connessione a SQL utilizzando ADO.NET nella Home Page per la programmazione client SQL.
Passaggio 4: verificare gli alias sui computer client
Gli alias vengono spesso utilizzati negli ambienti client quando ci si connette a SQL Server con un nome alternativo oppure quando si verificano problemi di risoluzione dei nomi nella rete. Vengono creati utilizzando lo strumento Gestione configurazione SQL Server oppure l'utilità di rete client. Un alias errato può causare la connessione delle applicazioni al server errato, causando un errore. Eseguire la procedura seguente per controllare eventuali alias errati. È anche possibile utilizzare uno strumento (ad esempio SQLCHECK) nel computer client per verificare la presenza di alias e varie altre impostazioni correlate alla connettività in un computer client.
Note
Le opzioni seguenti si applicano solo alle applicazioni che utilizzano SQL Server Native Client per connettersi a SQL Server.
Opzione 1: Usare il file di output SQLCHECK
- Nel file di output SQLCHECK cercare la stringa Alias SQL. (Questa stringa si troverà all'interno della sezione Sicurezza client e informazioni sul driver del file)
- Esaminare le voci nella tabella. Se non è presente alcun alias, significa che nel computer non sono presenti. Se è presente una voce, esaminare le informazioni per assicurarsi che il nome del server e il numero di porta siano impostati sui valori corretti.
Output di esempio:
Alias SQL:
Alias Name Protocol Server Name Port 32-bit
---------- -------- ------------ ---- ------
prodsql TCP prod_sqlserver 1430
L'output indica che prodsql
è un alias per un'istanza di SQL Server denominata prod_sqlserver
in esecuzione sulla porta 1430.
Opzione 2: controllare gli alias nello strumento Gestione configurazione di SQL Server
In Gestione configurazione SQL Server, espandere Configurazione SQL Server e selezionare Alias.
Controllare se sono stati definiti alias per il server a cui si sta tentando di connettersi.
Se gli alias esistono, attenersi alla seguente procedura:
- Aprire il riquadro Proprietà dell'alias.
- Rinominare il valore nel campo Nome Alia (ad esempio, se il nome del server è MySQL, rinominarlo come MySQL_test) e riprovare la connessione. Se la connessione funziona, l'alias non è corretto e potrebbe provenire da una configurazione precedente che non è più necessaria. Se la connessione non funziona, rinominare l'alias con il nome originale e passare al passaggio successivo.
- Controllare i parametri di connessione per l'alias e assicurarsi che siano corretti. Gli scenari comuni seguenti possono causare problemi di connettività:
- Indirizzo IP non corretto per il campo Server. Assicurarsi che l'indirizzo IP corrisponda alla voce nel file del registro degli errori di SQL Server.
- Nome del server non corretto nel campo Server. Ad esempio, l'alias del server indica il nome del server corretto. Tuttavia, le connessioni avranno esito negativo se il valore del parametro del nome del server non è corretto.
- Formato del nome della pipe non corretto (presupponendo che si usi un alias named pipe).
- Quando ci si connette a un'istanza predefinita denominata Mydefaultinstance, il nome della pipe deve essere \\Mydefaultinstance\pipe\sql\query.
- Quando ci si connette a un'istanza denominata MySQL\Named, il nome della pipe deve essere \\MySQL\pipe\MSSQL$Named\sql\query.
Opzione 3: controllare gli alias nell'utilità di rete client di SQL Server
- Aprire l'Utilità del server client di SQL Server digitando cliconfg.exe nel comando Esegui.
- Seguire il passaggio 2 descritto nella sezione Opzione 2: controllare gli alias nello strumento di Gestione configurazione SQL Server.
Passaggio 5: verificare la configurazione del firewall
È possibile verificare la configurazione del firewall a seconda dell'istanza predefinita oppure dell'istanza denominata.
Note
Se nella rete si utilizzano firewall di terze parti, i concetti si applicano comunque. Potrebbe tuttavia essere necessario collaborare con l'amministratore di rete oppure consultare la documentazione del prodotto firewall per maggiori informazioni sulla configurazione del firewall per abilitare le porte necessarie per la comunicazione con SQL Server.
Istanza predefinita di SQL Server
Generalmente un'istanza predefinita viene eseguita sulla porta 1433. Alcune installazioni utilizzano anche una porta non standard (diversa da 1433) per eseguire istanze SQL. Il firewall può bloccare entrambe le porte. Per controllare il numero della porta, attenersi alla seguente procedura:
- Determinare la porta su cui è in esecuzione l'istanza di SQL, vedere Ottenere la porta TCP dell'istanza.
-
- Se SQL Server è configurato per l'ascolto sulla porta 1433, assicurarsi che i firewall nella rete tra il client e il server consentano il traffico su tale porta. Consultare Configurare Windows Firewall per l'accesso al motore di database e collaborare con l'amministratore di rete per implementare le soluzioni necessarie.
- Se l'istanza predefinita di SQL Server non utilizza la porta 1433, provare ad aggiungere il numero di porta di SQL Server al nome del server utilizzando il formato
<servername>,<portnumber>
e verificare se funziona. Ad esempio, il nome dell'istanza SQL è MySQLDefaultinstance ed è in esecuzione sulla porta 2000. Specificare il nome del server come MySQLServer, 2000 e verificare se funziona.- Se dovesse funzionare, significa che il firewall sta bloccando la porta. È possibile seguire le istruzioni riportate nella sezione Configurare Windows Firewall per l'accesso al motore di database oppure collaborare con l'amministratore di rete per aggiungere la porta all'elenco di esclusione del firewall.
- Se dovesse funzionare, significa che il firewall consente la comunicazione tramite tale porta. È necessario modificare la stringa di connessione per utilizzare il numero di porta e il nome del server nella stringa di connessione dell'applicazione.
Istanza denominata di SQL Server
Se l'istanza di SQL è un'istanza denominata, può essere configurata per utilizzare le porte dinamiche oppure una porta statica. In entrambi i casi, le librerie di rete sottostanti eseguono query sul servizio SQL Server Browser in esecuzione nel computer SQL Server tramite la porta UDP 1434 per enumerare il numero di porta per l'istanza denominata. Se un firewall tra il client e il server blocca questa porta UDP, la libreria client non potrà determinare la porta (un requisito per la connessione) e la connessione fallirà. Per verificare la connessione, è possibile utilizzare uno dei seguenti metodi:
Metodo 1: controllare la connessione specificando il numero di porta nella stringa di connessione.
- Determinare la porta su cui è in esecuzione l'istanza di SQL, vedere Ottenere la porta TCP dell'istanza.
- Provare a connettersi all'istanza denominata usando il numero di porta aggiunto al nome del server nel formato
<servername\instancename>,<portnumber>
e verificare se funziona. Ad esempio, se il nome dell'istanza SQL è MySQL\Namedinstance ed è in esecuzione sulla porta 3000, specificare il nome del server come MySQL\Namedinstance,3000.- Qualora funzionasse, significa che il firewall sta bloccando la porta UDP 1434 oppure che l'istanza è nascosta da SQL Server Browser.
- Se non funziona, indica una delle situazioni seguenti:
Metodo 2: controllare la connessione usando lo strumento PortQryUI.
Usare lo strumento PortQryUI con l'istanza denominata e analizzare l'output risultante. È possibile che venga visualizzato un messaggio che indica che la porta UDP 1434 è filtrata. Questo messaggio indica che la porta è bloccata nella rete. Per istruzioni su come usare lo strumento, consultare Uso dello strumento PortQryUI con SQL Server.
Determinare se l'istanza di SQL Server è in ascolto su porte dinamiche o statiche. Usare quindi il metodo seguente rilevante per lo scenario. Se non si è certi, vedere Come verificare se SQL Server è in ascolto su una porta dinamica o statica.
- Scenario 1: porte dinamiche. In questo caso, assicurarsi che il servizio SQL Server Browser sia attivo e che la porta UDP 1434 non sia bloccata sul firewall tra il client e il server. Se non è possibile eseguire nessuna di queste operazioni, è necessario passare l'istanza di SQL Server a una porta statica e utilizzare la procedura documentata in Configurare un server per l'ascolto su una porta TCP specifica.
- Scenario 2: configurazione della porta statica. Se SQL Server Browser non è in esecuzione o l'UDP 1434 non può essere aperto nel firewall. In questo caso, assicurarsi di specificare la porta statica nella stringa di connessione e che il firewall non blocchi la porta. Per ulteriori informazioni, vedere Configurare un firewall di Windows per l'accesso al motore di database.
Passaggio 6: verificare i protocolli abilitati in SQL Server
In alcune installazioni di SQL Server, le connessioni al motore di database da un altro computer non sono abilitate a meno che un amministratore non le abiliti manualmente. È possibile utilizzare una delle seguenti opzioni per controllare e abilitare i protocolli necessari per consentire le connessioni remote al motore di database di SQL Server.
Opzione 1: Usare il file di output SQLCHECK
Cercare nel file di output SQLCHECK la sezione "Details for SQL Server instance" (Dettagli per l'istanza di SQL Server) e individuare la sezione delle informazioni per l'istanza di SQL Server.
Nella sezione, individuare i valori elencati nella seguente tabella per determinare se i protocolli di SQL Server sono abilitati:
Nome valore Implicazione Ulteriori informazioni Memoria condivisa abilitata Può essere vera o falsa: influisce solo sulle connessioni locali. Creazione di una stringa di connessione valida tramite il protocollo di memoria condivisa Named pipe abilitati Se la condizione è falsa, le connessioni locali e remote che utilizzano Named pipe falliranno Scelta di un protocollo di rete TCP abilitato Se la condizione è falsa, le connessioni locali e remote che utilizzano TCP/IP falliranno.
Nota La maggior parte delle installazioni di SQL Server utilizza il protocollo TCP/IP come protocollo di comunicazione tra il server e il client.Scelta di un protocollo di rete Abilitare i protocolli richiesti utilizzando Gestione configurazione SQL Server o SQL Server PowerShell. Per maggiori informazioni, consultare Abilitare o disabilitare un protocollo di rete del server.
Note
Dopo aver abilitato un protocollo, il motore di database deve essere arrestato e riavviato affinché la modifica abbia effetto.
Opzione 2: utilizzare lo strumento Gestione configurazione SQL Server
Per abilitare le connessioni da un altro computer utilizzando Gestione configurazione SQL Server, procedere come segue:
- Aprire Gestione configurazione SQL Server.
- Nel riquadro sinistro, espandere Configurazione di rete SQL Server e quindi selezionare l'istanza di SQL Server a cui connettersi. Nel riquadro di destra sono elencati i protocolli di connessione disponibili. Memoria condivisa è in genere abilitata. Può essere utilizzata solo dallo stesso computer, quindi la maggior parte delle installazioni prevede di lasciare abilitata la Memoria condivisa. Per connettersi a SQL Server da un altro computer, usare TCP/IP. Se TCP/IP non è abilitato, fare clic con il pulsante destro del mouse su TCP/IP e quindi scegliere Abilita.
- Se si modifica l'impostazione abilitata per qualsiasi protocollo, riavviare il motore di database. Nel riquadro sinistro selezionare Servizi di SQL Server. Nel riquadro sinistro, fare clic con il pulsante destro del mouse sul nome della directory virtuale, quindi fare clic su Riavvia.
Passaggio 7: testare la connettività TCP/IP
La connessione a SQL Server tramite TCP/IP richiede che Windows stabilisca la connessione. È possibile utilizzare i seguenti passaggi per verificare la connettività TCP utilizzando lo strumento ping.
- Nel menu Start selezionare Esegui. Nella finestra Esegui, digitare cmd, quindi fare clic su OK.
- Nella finestra Prompt dei comandi, digitare
ping
e l'indirizzo IP del computer che esegue SQL Server. Ad esempio:- IPv4:
ping 192.168.1.101
- IPv6:
ping fe80::d51d:5ab5:6f09:8f48%11
- IPv4:
- Se la rete è configurata correttamente,
ping
restituisceReply from <IP address>
seguito da alcune informazioni aggiuntive. Seping
restituisceDestination host unreachable
oRequest timed out
, TCP/IP non è configurato correttamente. Gli errori a questo punto indicano un problema con il computer client, con il computer server o con un componente della rete, ad esempio un router. Per risolvere i problemi di rete, vedere Risoluzione avanzata dei problemi relativi a TCP/IP. - Se il test
ping
ha esito positivo usando l'indirizzo IP, verificare se il nome del computer può essere associato all'indirizzo TCP/IP. Sul computer client, nella finestra Prompt dei comandi, digitare ping e il nome del computer su cui è in esecuzione SQL Server. Ad esempio:ping newofficepc
. - Se il ping all'indirizzo IP ha esito positivo, ma il ping al nome del computer restituisce
Destination host unreachable
oRequest timed out
, è possibile che le informazioni sulla risoluzione dei nomi siano vecchie (non aggiornate) e memorizzate nella cache del computer client. Digitareipconfig /flushdns
per cancellare la cache DNS (Dynamic Name Resolution). Quindi eseguire nuovamente il ping del computer per nome. Quando la cache DNS è vuota, il computer client controlla le informazioni più recenti sull'indirizzo IP del computer server. - Se la rete è configurata correttamente,
ping
restituisceReply from <IP address>
seguito da alcune informazioni aggiuntive. Se è possibile eseguire il ping del computer server in base all'indirizzo IP, ma si riceve un errore del tipoDestination host unreachable
oRequest timed out
quando si esegue il ping in base al nome del computer, significa che la risoluzione dei nomi non è configurata correttamente. Per altre informazioni, vedere come Risolvere i problemi TCP/IP di base. La risoluzione dei nomi non è necessaria per connettersi a SQL Server. Tuttavia, se il nome del computer non può essere risolto con un indirizzo IP, è necessario effettuare delle connessioni per specificare l'indirizzo IP. La risoluzione dei nomi può essere risolta in un secondo momento.
Note
È anche possibile usare il cmdlet Test-NetConnection o Test-Connection per testare la connettività TCP in base alla versione di PowerShell installata nel computer. Per maggiori informazioni su questo cmdlet, consultare la sezione Panoramica del cmdlet.
Passaggio 8: testare la connessione locale
Prima di risolvere un problema di connessione da un altro computer, testare la possibilità di connettersi da un'applicazione client installata in locale nel computer che esegue SQL Server. La connessione locale evita problemi di rete e firewall.
Questa procedura richiede SQL Server Management Studio. Se Management Studio non è installato, vedere Scaricare SQL Server Management Studio (SSMS).
Se non è possibile installare Management Studio, è possibile testare la connessione usando l'utilità sqlcmd.exe. sqlcmd.exe viene installata con il motore di database. Per informazioni su sqlcmd.exe, vedere Utilità sqlcmd.
Accedere al computer in cui è installato SQL Server usando un account di accesso che può accedere a SQL Server. Durante l'installazione, SQL Server richiede che sia specificato almeno un account di accesso come amministratore SQL Server. Se non si conosce un amministratore, vedere Connettersi a SQL Server quando gli amministratori di sistema sono bloccati.
Nella pagina Start, digitare SQL Server Management Studio, oppure nel menu Start nelle versioni precedenti di Windows, selezionare Tutti i programmi, selezionare Microsoft SQL Server, quindi selezionare SQL Server Management Studio.
Nel menu a discesa Connetti, selezionare Motore di database. Nella casella Autenticazione, selezionare Autenticazione di Windows. Nella casella Nome server, digitare uno dei tipi di connessione seguenti:
Connessione a Type Esempio Istanza predefinita <computer name>
ACCNT27
Istanza denominata <computer name\instance name>
ACCNT27\PAYROLL
Note
Quando ci si connette a SQL Server da un'applicazione client nello stesso computer, viene usato il protocollo di memoria condivisa. La memoria condivisa è un tipo di named pipe locale, quindi a volte possono verificarsi errori correlati alle pipe.
Se a questo punto viene visualizzato un errore, è necessario risolverlo prima di procedere. L'account di accesso potrebbe non essere autorizzato a connettersi. Il database predefinito potrebbe non essere presente.
Note
Non è possibile risolvere il problema senza informazioni sufficienti perché alcuni messaggi di errore vengono passati intenzionalmente al client. Si tratta di una funzionalità di sicurezza per evitare di fornire a un utente malintenzionato informazioni su SQL Server. Per visualizzare i dettagli sull'errore, vedere il registro degli errori di SQL Server.
Se viene visualizzato l'errore 18456 Accesso non riuscito per l'utente l'articolo di Documentazione online MSSQLSERVER_18456 contiene informazioni aggiuntive sui codici di errore. Il blog di Aaron Bertrand contiene anche un elenco completo di codici di errore in Risoluzione dei problemi relativi all'errore 18456 (collegamento esterno). È possibile visualizzare il registro degli errori usando SSMS (se è possibile connettersi) nella sezione Gestione di Esplora oggetti. In caso contrario, è possibile visualizzare il registro degli errori con il programma Blocco note di Windows. Il percorso predefinito varia in base alla versione e può essere modificato durante l'installazione. Il percorso predefinito per SQL Server 2019 (15.x) è C:\Programmi\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log\ERRORLOG.
Se è possibile connettersi usando la memoria condivisa, testare la connessione tramite TCP. È possibile forzare una connessione TCP specificando
tcp:
prima del nome. Ecco gli esempi:Connessione a: Tipo: Esempio: Istanza predefinita tcp:<computer name>
tcp:ACCNT27
Istanza denominata tcp:<computer name/instance name>
tcp:ACCNT27\PAYROLL
Se è possibile connettersi usando la memoria condivisa ma non TCP, è necessario risolvere il problema TCP. Il problema più probabile è che TCP non sia abilitato. Per abilitare TCP, vedere Passaggio 6: verificare i protocolli abilitati in SQL Server.
Se l'obiettivo è connettersi usando un account diverso da quello di amministratore, è possibile iniziare connettendosi come amministratore. Provare quindi a connettersi di nuovo con l'account di accesso con autenticazione di Windows o l'account di accesso con autenticazione SQL Server usato dall'applicazione client.
Passaggio 9: testare la connessione remota
Una volta che è possibile connettersi usando TCP nello stesso computer, è il momento di provare a connettersi dal computer client. È possibile usare qualsiasi applicazione client, ma per evitare complessità, installare Strumenti di gestione SQL Server nel client. Dopo l'installazione, provare a usare SQL Server Management Studio.
- Usare SQL Server Management Studio nel computer client e provare a connettersi usando l'indirizzo IP e il numero di porta TCP nel formato indirizzo IP virgola numero porta. Ad esempio:
192.168.1.101,1433
. Se la connessione non riesce, è probabile che si verifichi uno dei problemi seguenti:ping
dell'indirizzo IP non funziona. Indica un problema di configurazione TCP generale. Tornare alla sezione Passaggio 7: testare la connettività TCP/IP.- SQL Server non è in ascolto sul protocollo TCP. Tornare alla sezione Passaggio 6: verificare i protocolli abilitati in SQL Server.
- SQL Server è in ascolto su una porta diversa dalla porta specificata. Tornare alla sezione Ottenere la porta TCP.
- La porta TCP di SQL Server viene bloccata dal firewall. Tornare alla sezione Passaggio 5: verificare la configurazione del firewall.
- Dopo aver eseguito la connessione usando l'indirizzo IP e il numero di porta, esaminare gli scenari seguenti:
- Se ci si connette a un'istanza predefinita in ascolto su qualsiasi porta diversa da 1433, è necessario usare il numero di porta nella stringa di connessione o creare un alias nel computer client per connettersi all'istanza predefinita. Il servizio SQL Server Browser non può enumerare le porte dell'istanza predefinita.
- Se ci si connette a un'istanza denominata, provare a connettersi all'istanza nel formato indirizzo IP barra rovesciata nome istanza. (Ad esempio,
192.168.1.101\<instance name>
.) Se questa azione non funziona, significa che il numero di porta non viene restituito al client. Il problema è correlato al servizio SQL Server Browser, che fornisce al client il numero di porta di un'istanza denominata. Ecco le soluzioni:- Avviare il servizio SQL Server Browser. Vedere le istruzioni per avviare il browser in Gestione configurazione SQL Server.
- Il servizio SQL Server Browser viene bloccato dal firewall. Aprire la porta UDP 1434 nel firewall. Tornare alla sezione Passaggio 5: verificare la configurazione del firewall. Assicurarsi di aprire una porta UDP, non una porta TCP.
- Le informazioni sulla porta UDP 1434 vengono bloccate da un router. La comunicazione UDP (user datagram protocol) non è progettata per il trasferimento via router e impedisce il sovraccarico della rete con traffico di priorità bassa. È possibile configurare il router per inoltrare il traffico UDP oppure specificare il numero di porta ogni volta che ci si connette.
- Se il computer client usa Windows 7, Windows Server 2008 o un sistema operativo più recente, il sistema operativo client potrebbe eliminare il traffico UDP perché la risposta del server viene restituita da un indirizzo IP diverso da quello richiesto. Questa azione è una funzionalità di sicurezza che blocca il "mapping di origine debole". Per altre informazioni, vedere la sezione Più indirizzi IP del server della documentazione online risoluzione dei problemi: Timeout scaduto. Questo articolo proviene da SQL Server 2008 R2, ma le entità sono ancora valide. È possibile configurare il client in modo da usare l'indirizzo IP corretto o specificare il numero di porta ogni volta che ci si connette.
- Dopo aver eseguito la connessione usando l'indirizzo IP (o l'indirizzo IP e il nome dell'istanza per un'istanza denominata), provare a connettersi usando il nome computer (o il nome del computer e il nome dell'istanza per un'istanza denominata). Inserire
tcp:
prima del nome del computer per forzare una connessione TCP/IP. Ad esempio, per l'istanza predefinita in un computer denominato ACCNT27, usaretcp:ACCNT27
. Per un'istanza denominata con nome PAYROLL, usaretcp:ACCNT27\PAYROLL
su tale computer. Se è possibile connettersi usando l'indirizzo IP, ma non il nome del computer, si è verificato un problema di risoluzione dei nomi. Tornare alla sezione Passaggio 7: testare la connettività TCP/IP. - Una volta che è possibile connettersi usando il nome del computer forzando TCP, provare a connettersi con il solo nome del computer senza TCP. Ad esempio, per un'istanza predefinita, usare semplicemente un nome computer quale CCNT27. Per un'istanza denominata, usare il nome computer e il nome dell'istanza, ad esempio ACCNT27\PAYROLL. Se è possibile connettersi forzando TCP, ma è impossibile senza TCP, il client probabilmente usa un altro protocollo, ad esempio named pipe. Per risolvere questo problema, attenersi alla procedura seguente:
- Nel computer client usare Gestione configurazione SQL Server. Nel riquadro sinistro espandere Configurazione della versione> di SQL Native Client <e quindi selezionare Protocolli client.
- Nel riquadro destro verificare che TCP/IP sia abilitato. Se TCP/IP è disabilitato, fare clic con il pulsante destro del mouse su TCP/IP e scegliere Abilita.
- Assicurarsi che l'ordine di protocollo per TCP/IP sia un numero inferiore rispetto ai protocolli named pipe (o VIA nelle versioni precedenti). In genere, è consigliabile lasciare la memoria condivisa come ordine 1 e TCP/IP come ordine 2. La memoria condivisa viene usata solo quando il client e SQL Server sono in esecuzione nello stesso computer. Tutti i protocolli abilitati vengono provati in ordine fino a quando uno non viene eseguito correttamente, ma la memoria condivisa viene ignorata quando la connessione non si trova nello stesso computer.
Passaggio 10: Controllare le autorizzazioni utente
Se si usa Named Pipes per connettersi, verificare se un utente dispone delle autorizzazioni per accedere a Windows. Per altre informazioni, vedere Risoluzione dei problemi relativi alle connessioni named pipe.
Vedi anche
- Protocolli e librerie di rete
- Configurazione di rete dei client
- Configurazione di protocolli client
- Risolvere i problemi di connettività in SQL Server
- 0200 Problema di rete costante
- Connettersi a un listener del gruppo di disponibilità Always On
- Istanze del cluster di failover Always On (SQL Server)
- Risoluzione dei problemi di connettività e di altri errori con il database SQL di Azure e Istanza gestita di SQL di Azure