Condividi tramite


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

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:

    1. Scaricare la versione più recente di SQLCHECK.

    2. Decomprimere il file scaricato in una cartella, ad esempio C:\Temp.

    3. 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:

  1. 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."
    
  2. 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 usare Test-NetConnection in PowerShell:

    $servername = "DestinationServer"
    Test-NetConnection -ComputerName $servername
    
  3. 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
    
  4. 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")
    
  5. 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.

  6. 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 disponga CONNECT delle autorizzazioni per il database. Per altre informazioni su come concedere CONNECT le autorizzazioni all'entità di database, vedere GRANT Database Permissions. Per altre informazioni su come concedere CONNECT 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 + "'")
    
  7. 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.