Prerequisiti ed elenco di controllo consigliati per la risoluzione dei problemi di connettività di SQL Server
Si applica a: SQL Server
Numero della Knowledge Base originale: 4009936
Prerequisiti consigliati
Per risolvere efficacemente i problemi di connettività, raccogliere le informazioni seguenti:
Testo del messaggio di errore e codici di errore. Controllare se l'errore è intermittente (si verifica solo a volte) o coerente (si verifica sempre).
Registri eventi di sistema e applicazioni da SQL Server e dai sistemi client. Questi log consentono di verificare se si verificano problemi a livello di sistema in SQL Server.
Se le connessioni hanno esito negativo da un'applicazione, raccogliere le stringhe di connessione dall'applicazione. Queste stringhe si trovano in genere nei file Web.config per le applicazioni ASP.NET.
Raccogliere ed esaminare i log degli errori di SQL Server per altri messaggi di errore ed eccezioni.
Se si dispone dell'accesso amministratore al computer SQL Server, raccogliere ed esaminare le impostazioni correnti del computer e gli account del servizio usando la procedura seguente:
Scaricare la versione più recente di SQLCHECK.
Decomprimere il file scaricato in una cartella, ad esempio C:\Temp.
Eseguire il prompt dei comandi come amministratore per raccogliere i dati e salvarli in un file. Ad esempio:
SQLCHECK > C:\Temp\server01.SQLCHECK.TXT
.
Nota
Se si stanno risolvendo i problemi di connettività da un client remoto o si stanno risolvendo le query del server collegato, eseguire lo strumento SQLCHECK in tutti i sistemi coinvolti.
Elenco di controllo rapido per la risoluzione dei problemi di connettività
Nota
Le sezioni seguenti consentono di verificare rapidamente la presenza di problemi di connettività. Esaminare i singoli argomenti per i passaggi dettagliati per la risoluzione dei problemi.
Opzione 1
Se si ha accesso all'output dello strumento SQLCHECK indicato nella sezione Prerequisiti consigliati e si esaminano le informazioni in varie sezioni del file di output (Computer, Sicurezza client e SQL Server), usare le informazioni per risolvere i problemi che contribuiscono al problema. Vedere gli esempi seguenti:
Sezione nel file | Testo da cercare | Azione potenziale | Può aiutare a risolvere i problemi (esempi) |
---|---|---|---|
Informazioni sul computer | Avviso: il driver di rete potrebbe non essere aggiornato | Controllare online la presenza di nuovi driver. | Vari errori di connettività |
Sicurezza client e informazioni sul driver | Diffie-Hellman suite di crittografia sono abilitate. Possibile rischio di errori TLS intermittenti se la versione dell'algoritmo è diversa tra client e server | Se si verificano problemi di connettività intermittente, vedere L'esperienza delle applicazioni ha chiuso forzatamente gli errori di connessione TLS durante la connessione a SQL Server in Windows. | Una connessione esistente è stata forzatamente chiusa dall'host remoto |
Sicurezza client e informazioni sul driver | Alias SQL | Se presente, assicurarsi che gli alias siano configurati correttamente e che puntino al server e agli indirizzi IP corretti. | Si è verificato un errore correlato alla rete o specifico dell'istanza durante la connessione a SQL Server |
Informazioni su SQL Server | Servizi di interesse | Se il servizio SQL non è avviato, avviarlo. Se si verificano problemi di connessione a un'istanza denominata, assicurarsi che il servizio SQL Server Browser sia avviato o provare a riavviare il servizio browser. | Si è verificato un errore correlato alla rete o specifico dell'istanza durante la connessione a SQL Server |
Informazioni su SQL Server | Proprietà dell'account del servizio di dominio | Se si configurano server collegati da SQL Server e il valore Trust for Del è impostato su false, è possibile che si verifichino problemi di autenticazione con le query del server collegato. | Risoluzione degli errori "Accesso non riuscito per l'utente" |
Informazioni su SQL Server | SPN non esiste | Controllare questa tabella per verificare se i nomi SPN per SQL Server sono configurati correttamente e correggere eventuali problemi identificati. | Impossibile generare il contesto SSPI |
Informazioni su SQL Server | Dettagli per l'istanza di SQL Server | Controllare i valori di TCP Abilitato, Porte TCP e così via. Verificare se TCP/IP è abilitato sul lato server e se l'istanza predefinita di SQL è in ascolto su 1433 o su una porta diversa. | Vari errori di connettività |
Opzione 2
Se non è possibile eseguire SQLCHECK nel computer SQL Server, è possibile controllare gli elementi seguenti prima di eseguire una risoluzione approfondita dei problemi:
Assicurarsi che SQL Server sia avviato e che venga visualizzato il messaggio seguente nel log degli errori di SQL Server:
SQL Server è ora pronto per le connessioni client. Si tratta di un messaggio informativo; non è necessaria alcuna azione dell'utente.
Usare il comando seguente in PowerShell per controllare lo stato dei servizi SQL Server nel sistema:
Get-Service | Where {$_.status -eq 'running' -and $_.DisplayName -match "sql server*"}
Usare il comando seguente per cercare nel file di log degli errori la stringa specifica "SQL Server è ora pronto per le connessioni client. 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."
Verificare la connettività di base tramite l'indirizzo IP e verificare la presenza di eventuali anomalie:
ping -a <SQL Server machine>, ping -a <SQL Server IP address>
. In caso di problemi, rivolgersi all'amministratore di rete. In alternativa, è possibile usareTest-NetConnection
in PowerShell:$servername = "DestinationServer" Test-NetConnection -ComputerName $servername
Controllare se SQL Server è in ascolto sui protocolli appropriati esaminando il log degli errori:
Get-ChildItem -Path "c:\program files\microsoft sql server\mssql*" -Recurse -Include Errorlog |select-string "Server is listening on" , "ready to accept connection on" -AllMatches
Verificare se è possibile connettersi a SQL Server usando un file UDL. Se funziona, potrebbe verificarsi un problema con la stringa di connessione. Per istruzioni sulla procedura di test UDL, vedere Testare la connettività OLE DB a SQL Server usando un file UDL. In alternativa, è possibile usare lo script seguente per creare e avviare un file UDL-Test.udl (archiviato nella cartella %TEMP% ):
clear $ServerName = "(local)" $UDL_String = "[oledb]`r`n; Everything after this line is an OLE DB initstring`r`nProvider=MSOLEDBSQL.1;Integrated Security=SSPI;Persist Security Info=False;User ID=`"`";Initial Catalog=`"`";Data Source=" + $ServerName + ";Initial File Name=`"`";Server SPN=`"`";Authentication=`"`";Access Token=`"`"" Set-Content -Path ($env:temp + "\UDL-Test.udl") -Value $UDL_String -Encoding Unicode #open the UDL Invoke-Expression ($env:temp + "\UDL-Test.udl")
Verificare se è possibile connettersi a SQL Server da altri sistemi client e da account di accesso utente diversi. Se si è in grado di farlo, il problema potrebbe essere specifico del client o dell'account di accesso che sta riscontrando il problema. Controllare i log eventi di Windows nel client problematico per altri puntatori. Controllare anche se i driver di rete sono aggiornati.
Se si verificano errori di accesso, assicurarsi che esista un account di accesso (entità server) e che disponga
CONNECT SQL
delle autorizzazioni per SQL Server. Assicurarsi inoltre che il database predefinito assegnato all'account di accesso sia corretto e che l'entità di database mappata dispongaCONNECT
delle autorizzazioni per il database. Per altre informazioni su come concedereCONNECT
le autorizzazioni all'entità di database, vedere GRANT Database Permissions. Per altre informazioni su come concedereCONNECT SQL
le autorizzazioni all'entità server, vedere GRANT Server Permissions. Usare lo script seguente per identificare queste autorizzazioni:clear ## replace these variables with the login, user, database and server $server_principal = "CONTOSO\JaneK" $database_principal = "JaneK" $database_name = "mydb" $server_name = "myserver" Write-Host "`n******* Server Principal (login) permissions *******`n`n" sqlcmd -E -S $server_name -Q ("set nocount on; SELECT convert(varchar(32),pr.type_desc) as login_type, convert(varchar(32), pr.name) as login_name, is_disabled, convert(varchar(32), isnull (pe.state_desc, 'No permission statements')) AS state_desc, convert(varchar(32), isnull (pe.permission_name, 'No permission statements')) AS permission_name, convert(varchar(32), default_database_name) as default_db_name FROM sys.server_principals AS pr LEFT OUTER JOIN sys.server_permissions AS pe ON pr.principal_id = pe.grantee_principal_id WHERE is_fixed_role = 0 -- Remove for SQL Server 2008 and name = '" + $server_principal + "'") Write-Host "`n******* Database Principal (user) permissions *******`n`n" sqlcmd -E -S $server_name -d $database_name -Q ("set nocount on; SELECT convert(varchar(32),pr.type_desc) as user_type, convert(varchar(32),pr.name) as user_name, convert(varchar(32), isnull (pe.state_desc, 'No permission statements')) AS state_desc, convert(varchar(32), isnull (pe.permission_name, 'No permission statements')) AS permission_name FROM sys.database_principals AS pr LEFT OUTER JOIN sys.database_permissions AS pe ON pr.principal_id = pe.grantee_principal_id WHERE pr.is_fixed_role = 0 and name = '" + $database_principal + "'") Write-Host "`n******* Server to Database Principal mapping ********`n" sqlcmd -E -S $server_name -d $database_name -Q ("exec sp_helplogins '" + $server_principal + "'")
Se si stanno risolvendo i problemi correlati a Kerberos, è possibile usare gli script in Come determinare se il tipo di autenticazione è Kerberos.
Problemi di connettività comuni
Dopo aver esaminato i prerequisiti e l'elenco di controllo, vedere problemi di connettività comuni e selezionare il messaggio di errore corrispondente per i passaggi dettagliati per la risoluzione dei problemi.