Risoluzione dei problemi di connettività e di altri errori con il database SQL di Azure e Istanza gestita di SQL di Azure

SI APPLICA A: database SQL di Azure Istanza gestita di SQL di Azure

Si ricevono messaggi di errore quando la connessione a database SQL di Azure o Istanza gestita di SQL di Azure ha esito negativo. Questi problemi di connessione possono essere causati dalla riconfigurazione, dalle impostazioni del firewall, dal timeout della connessione, dalle informazioni di accesso non corrette o dall'applicazione di procedure consigliate e linee guida di progettazione durante il processo di progettazione dell'applicazione . Inoltre, se il limite massimo per alcune risorse database SQL di Azure o Istanza gestita di SQL viene raggiunto, non è più possibile connettersi.

Messaggi di errore temporanei (40197, 40613 e altri)

L'infrastruttura Azure è in grado di riconfigurare dinamicamente i server quando si verificano carichi di lavoro intensi nel servizio del database SQL. Questo comportamento dinamico potrebbe causare la perdita della connessione al database o all'istanza del programma client. Questo tipo di errore è chiamato errore temporaneo. Gli eventi di riconfigurazione del database avvengono in seguito a eventi pianificati (ad esempio nel caso degli aggiornamenti software) o non pianificati (ad esempio per l'arresto anomalo di un processo o per il bilanciamento del carico). La maggior parte degli eventi di riconfigurazione è di breve durata e deve essere completata in meno di 60 secondi al massimo. Tuttavia, il completamento di questi eventi in alcuni casi può richiedere più tempo, ad esempio quando una transazione di grandi dimensioni provoca un ripristino a esecuzione prolungata. La tabella seguente elenca vari errori temporanei che le applicazioni possono ricevere durante la connessione a database SQL di Azure.

Elenco dei codici di errore temporanei

Codice di errore Gravità Descrizione
926 14 Impossibile aprire il database 'replicatedmaster'. perché durante il processo di recupero è stato contrassegnato come SUSPECT. Per ulteriori informazioni, vedere il registro errori di SQL Server.

Questo errore può essere connesso Istanza gestita di SQL errorlog, per un breve periodo di tempo, durante l'ultima fase di una riconfigurazione, mentre il vecchio primario sta arrestando il log.
Altri scenari non temporanei che coinvolgono questo messaggio di errore sono descritti nella documentazione degli errori MSSQL.
4060 16 Impossibile aprire il database "%.*ls" richiesto dall'account di accesso. Accesso non riuscito. Per altre informazioni, vedere Errori da 4000 a 4999
40197 17 Il servizio ha rilevato un errore durante l'elaborazione della richiesta. Riprova. Codice di errore %d.

Questo errore viene visualizzato quando il servizio non è disponibile a causa di aggiornamenti software o hardware, guasti hardware o altri problemi di failover. Nel codice di errore (%d) incorporato nel messaggio di errore 40197 sono contenute ulteriori informazioni sul tipo di errore o failover che si è verificato. Alcuni esempi dei codici di errore incorporati nel messaggio di errore 40197 sono 40020, 40143, 40166 e 40540.

Riconnessione automatica si connette a una copia integra del database. L'applicazione deve rilevare l'errore 40197, registrare il codice di errore incorporato (%d) nel messaggio per la risoluzione dei problemi e tentare la riconnessione al database SQL finché le risorse non saranno disponibili e la connessione non sarà stata ristabilita. Per altre informazioni, vedere Errori temporanei.
40501 20 Il servizio è attualmente occupato. Ripetere la richiesta dopo 10 secondi. ID evento imprevisto: %ls. Codice: %d. Per altre informazioni, vedere:
Limiti di risorse server SQL logici
Limiti basati su DTU per i singoli database
Limiti basati su DTU per pool elastici
Limiti basati su vCore per i singoli database
Limiti basati su vCore per pool elastici
Istanza gestita di SQL di Azure limiti delle risorse.
40613 17 Il database '%.*ls' nel server '%.*ls' non è attualmente disponibile. Eseguire nuovamente la connessione in un secondo momento. Se il problema persiste, contattare il Supporto tecnico indicando l'ID di traccia della sessione di '%.*ls'.

Questo errore può verificarsi se è già stata stabilita una connessione amministratore dedicato esistente al database. Per altre informazioni, vedere Errori temporanei.
49918 16 Impossibile elaborare una richiesta. Risorse insufficienti per elaborare la richiesta.

Il servizio è attualmente occupato. Si prega di ripetere la richiesta più tardi. Per altre informazioni, vedere:
Limiti di risorse server SQL logici
Limiti basati su DTU per i singoli database
Limiti basati su DTU per pool elastici
Limiti basati su vCore per i singoli database
Limiti basati su vCore per pool elastici
Istanza gestita di SQL di Azure limiti delle risorse.
49919 16 Il processo non può creare o aggiornare la richiesta. Troppe operazioni di creazione o aggiornamento in corso per "%ld" della sottoscrizione.

Il servizio è occupato nell'elaborazione di più creazioni o aggiornamenti delle richieste per sottoscrizione o server. Le richieste al momento sono bloccate per l'ottimizzazione delle risorse. Eseguire la query sys.dm_operation_status per le operazioni in sospeso. Attendere che le richieste di creazione o aggiornamento in sospeso siano complete o cancellare una delle richieste in sospeso e ripetere la richiesta in un secondo momento. Per altre informazioni, vedere:
Limiti di risorse server SQL logici
Limiti basati su DTU per i singoli database
Limiti basati su DTU per pool elastici
Limiti basati su vCore per i singoli database
Limiti basati su vCore per pool elastici
Istanza gestita di SQL di Azure limiti delle risorse.
49920 16 Impossibile elaborare una richiesta. Troppe operazioni di creazione o aggiornamento in corso per "%ld" della sottoscrizione.

Il servizio è occupato nell'esecuzione di più richieste per la presente sottoscrizione. Le richieste al momento sono bloccate per l'ottimizzazione delle risorse. Eseguire la query sys.dm_operation_status per lo stato delle operazioni. Attendere che le richieste in sospeso siano complete o cancellare una delle richieste in sospeso e ripetere la richiesta in un secondo momento. Per altre informazioni, vedere:
Limiti di risorse server SQL logici
Limiti basati su DTU per database singoli
Limiti basati su DTU per i pool elastici
Limiti basati su vCore per database singoli
Limiti basati su vCore per i pool elastici
Istanza gestita di SQL di Azure limiti delle risorse.
4221 16 L'accesso alla replica secondaria in lettura non è riuscito a causa del tempo di attesa lungo di 'HADR_DATABASE_WAIT_FOR_TRANSITION_TO_VERSIONING'. La replica non è disponibile per l'accesso perché mancano le versioni di riga per le transazioni che erano in esecuzione quando la replica è stata riciclata. Per risolvere il problema, eseguire il rollback o il commit delle transazioni attive nella replica primaria. È possibile ridurre le occorrenze di questa condizione evitando transazioni di scrittura lunghe nella replica primaria.
615 21 Impossibile trovare l'ID database %d, nome '%.*ls'. Codice errore 615.
Ciò significa che la cache in memoria non è sincronizzata con SQL'istanza del server e le ricerche recuperano l'ID del database non aggiornato.

SQL gli account di accesso usano la cache in memoria per ottenere il nome del database al mapping id. La cache deve essere sincronizzata con il database back-end e aggiornata ogni volta che si collega e scollega il database dall'istanza del server SQL.
Questo errore viene visualizzato quando il flusso di lavoro di scollegamento non riesce a pulire la cache in memoria in tempo e le ricerche successive al database puntano all'ID del database non aggiornato.

Provare a riconnettersi a database SQL fino a quando la risorsa non è disponibile e la connessione viene stabilita di nuovo. Per altre informazioni, vedere Errori temporanei.

Passaggi per risolvere problemi di connettività temporanei

  1. Controllare nel Dashboard dei servizi di Microsoft Azure le eventuali interruzioni note che si sono verificate durante il periodo nel quale sono stati segnalati errori dall'applicazione.
  2. Le applicazioni che si connettono a un servizio cloud, ad esempio database SQL di Azure, devono prevedere eventi di riconfigurazione periodici e implementare la logica di ripetizione dei tentativi per gestire questi errori anziché visualizzare gli errori dell'applicazione agli utenti.
  3. Quando un database sta per raggiungere i limiti delle risorse, può sembrare che si stia verificando un problema di connettività temporaneo. Vedere Limiti delle risorse.
  4. Se i problemi di connettività persistono oppure se l'applicazione rileva l'errore per più di 60 secondi o se vengono visualizzate più occorrenze dell'errore in un dato giorno, inoltrare una richiesta di supporto tecnico di Azure selezionando Ottieni supporto nel sito Supporto tecnico di Azure .

Implementare della logica di riesecuzione

È consigliabile dotare il programma client di logica di ripetizione dei tentativi, in modo che sia in grado di ristabilire una connessione dopo aver concesso all'errore temporaneo un tempo sufficiente per correggersi. È consigliabile attendere 5 secondi prima di riprovare. Il tentativo dopo un ritardo inferiore a 5 secondi rischia di sovraccaricare il servizio cloud. Per ogni tentativo successivo, aumentare in modo esponenziale il ritardo, fino a un massimo di 60 secondi.

Per esempi di codice relativi alla logica di ripetizione dei tentativi, vedere:

Per altre informazioni sulla gestione degli errori temporanei nell'applicazione, vedere Risoluzione degli errori di connessione temporanei a database SQL

Una descrizione del periodo di blocco per i client che usano ADO.NET è disponibile in Pool di connessioni (ADO.NET).

Il problema si verifica se l'applicazione non riesce a connettersi al server.

Per risolvere questo problema, provare i passaggi descritti nell'ordine presentato nella sezione Passaggi per risolvere i problemi di connessione comuni .

Il server o l'istanza non è stato trovato o non è accessibile (errori 26, 40, 10053)

Errore 26: Errore durante l'individuazione del server specificato

System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections.(provider: SQL Network Interfaces, error: 26 – Error Locating Server/Instance Specified)

Errore 40: Impossibile aprire una connessione al server

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

Errore 10053: Si è verificato un errore a livello di trasporto durante la ricezione dei risultati dal server

10053: A transport-level error has occurred when receiving results from the server. (Provider: TCP Provider, error: 0 - An established connection was aborted by the software in your host machine)

Questi problemi si verificano se l'applicazione non riesce a connettersi al server.

Per risolvere questi problemi, provare i passaggi (nell'ordine presentato) nella sezione Passaggi per risolvere i problemi di connessione comuni .

Impossibile connettersi al server a causa di problemi del firewall

Errore 40615: Impossibile connettersi al < nomeserver >

Per risolvere questo problema, configurare le impostazioni del firewall in database SQL tramite il portale di Azure.

Errore 5: Impossibile connettersi al < nomeserver >

Per risolvere questo problema, assicurarsi che la porta 1433 sia aperta per le connessioni in uscita in tutti i firewall tra il client e Internet.

Impossibile accedere al server (errori 18456, 40531)

Accesso non riuscito per l'utente '< Nome >utente '

Login failed for user '<User name>'.This session has been assigned a tracing ID of '<Tracing ID>'. Provide this tracing ID to customer support when you need assistance. (Microsoft SQL Server, Error: 18456)

Per risolvere questo problema, contattare l'amministratore del servizio per fornire un nome utente e una password validi.

In genere, l'amministratore del servizio può seguire questa procedura per aggiungere le credenziali di accesso:

  1. Accedere al server usando SQL Server Management Studio (SSMS).

  2. Eseguire la query di SQL seguente nel master database per verificare se il nome dell'account di accesso è disabilitato:

    SELECT name, is_disabled FROM sys.sql_logins;
    
  3. Se il nome corrispondente è disabilitato, abilitarlo usando l'istruzione seguente:

    ALTER LOGIN <User name> ENABLE;
    
  4. Se il nome utente di accesso SQL non esiste, modificare ed eseguire la query SQL seguente per creare un nuovo account di accesso SQL:

    CREATE LOGIN <SQL_login_name, sysname, login_name>
    WITH PASSWORD = '<password, sysname, Change_Password>';
    GO
    
  5. In SSMS Esplora oggetti espandere Database.

  6. Selezionare il database a cui si vuole concedere l'autorizzazione utente.

  7. Fare clic con il pulsante destro del mouse su Sicurezza, quindi scegliere Nuovo, Utente.

  8. Nello script generato con segnaposto (esempio illustrato di seguito), sostituire i parametri del modello seguendo questa procedura ed eseguirlo:

    CREATE USER [<user_name, sysname, user_name>]
    FOR LOGIN [<login_name, sysname, login_name>]
    WITH DEFAULT_SCHEMA = [<default_schema, sysname, dbo>];
    GO
    
    -- Add user to the database owner role
    EXEC sp_addrolemember N'db_owner', N'<user_name, sysname, user_name>';
    GO
    

    È anche possibile usare sp_addrolemember per eseguire il mapping di utenti specifici a ruoli di database specifici.

    Nota

    In database SQL di Azure prendere in considerazione la sintassi ALTER ROLE più recente per la gestione dell'appartenenza al ruolo del database.

Per altre informazioni, vedere Gestione di database e account di accesso in database SQL di Azure.

Errori di timeout della connessione scaduti

System.Data.SqlClient.SqlException (0x80131904): Timeout connessione scaduto

System.Data.SqlClient.SqlException (0x80131904): Connection Timeout Expired. The timeout period elapsed while attempting to consume the pre-login handshake acknowledgement. This could be because the pre-login handshake failed or the server was unable to respond back in time. The duration spent while attempting to connect to this server was - [Pre-Login] initialization=3; handshake=29995;

System.Data.SqlClient.SqlException (0x80131904): Timeout scaduto

System.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

System.Data.Entity.Core.EntityException: il provider sottostante non è riuscito in Open

System.Data.Entity.Core.EntityException: The underlying provider failed on Open. -> System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. -> System.ComponentModel.Win32Exception: The wait operation timed out

Impossibile connettersi al < nome del server >

Cannot connect to <server name>.ADDITIONAL INFORMATION:Connection Timeout Expired. The timeout period elapsed during the post-login phase. The connection could have timed out while waiting for server to complete the login process and respond; Or it could have timed out while attempting to create multiple active connections. The duration spent while attempting to connect to this server was - [Pre-Login] initialization=231; handshake=983; [Login] initialization=0; authentication=0; [Post-Login] complete=13000; (Microsoft SQL Server, Error: -2) For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=-2&LinkId=20476 The wait operation timed out

Queste eccezioni possono verificarsi a causa di problemi di connessione o di query. Per verificare che questo errore sia causato da problemi di connettività, vedere Verificare se un errore è causato da un problema di connettività.

Si verificano timeout di connessione perché l'applicazione non è in grado di connettersi al server. Per risolvere questo problema, provare i passaggi descritti nell'ordine presentato nella sezione Passaggi per risolvere i problemi di connessione comuni .

Errori di governance delle risorse

database SQL di Azure usa un'implementazione di governance delle risorse basata su Resource Governor per applicare i limiti delle risorse. Altre informazioni sulla gestione delle risorse in database SQL di Azure.

Gli errori di governance delle risorse più comuni sono elencati per primi con i dettagli, seguiti da una tabella di messaggi di errore di governance delle risorse.

Errore 10928: ID risorsa: 1. Il limite di richieste per il database è %d ed è stato raggiunto.

Il messaggio di errore dettagliato in questo caso legge: Resource ID : 1. The request limit for the database is %d and has been reached. See 'http://go.microsoft.com/fwlink/?LinkId=267637' for assistance.

Questo messaggio di errore indica che è stato raggiunto il limite di lavoro per database SQL di Azure. Un valore sarà presente anziché il segnaposto %d. Questo valore indica il limite di lavoro per il database al momento del raggiungimento del limite.

Nota

L'offerta iniziale di database SQL di Azure supporta solo query a thread singolo. In quel momento, il numero di richieste era sempre equivalente al numero di ruoli di lavoro. Il messaggio di errore 10928 in database SQL di Azure contiene il termine "Il limite di richieste per il database è N ed è stato raggiunto" a scopo di compatibilità con le versioni precedenti. Il limite raggiunto è in realtà il numero di ruoli di lavoro. Se l'impostazione max degree of parallelism (MAXDOP) è uguale a zero o è maggiore di una, il numero di ruoli di lavoro può essere molto superiore al numero di richieste e il limite può essere raggiunto molto prima di quando MAXDOP è uguale a uno.

Altre informazioni su Sessioni, ruoli di lavoro e richieste.

Connessione con la connessione amministrativa dedicata (DAC) se necessario

Se si verifica un evento imprevisto attivo in cui è stato raggiunto o raggiunto il limite di lavoro, è possibile che venga visualizzato l'errore 10928 quando ci si connette usando SQL Server Management Studio (SSMS) o Azure Data Studio. Una sessione può connettersi usando la connessione di diagnostica per gli amministratori di database (DAC) anche quando è stata raggiunta la soglia massima del ruolo di lavoro.

Per stabilire una connessione con l'applicazione livello dati da SSMS:

  • Dal menu selezionare File > Nuovo > motore di database Query
  • Nella finestra di dialogo di connessione nel campo Nome server immettere admin:<fully_qualified_server_name> (sarà simile admin:servername.database.windows.neta ).
  • Selezionare opzioni >>
  • Selezionare la scheda Proprietà connessione
  • Nella casella Connessione al database digitare il nome del database
  • Selezionare Connetti.

Se viene visualizzato l'errore 40613, Database '%.&#x2a;ls' on server '%.&#x2a;ls' is not currently available. Please retry the connection later. If the problem persists, contact customer support, and provide them the session tracing ID of '%.&#x2a;ls', potrebbe indicare che un'altra sessione è già connessa all'applicazione livello dati. Una sola sessione può connettersi all'applicazione livello dati per un database singolo o un pool elastico alla volta.

Se viene visualizzato l'errore "Impossibile connettersi al server" dopo aver selezionato Connessione, è possibile che la sessione di applicazione livello dati sia stata stabilita correttamente se si usa una versione di SSMS precedente alla 18.9. Versioni iniziali di SSMS hanno tentato di fornire IntelliSense per le connessioni all'applicazione livello dati. Questa operazione non è riuscita perché l'applicazione livello dati supporta solo un singolo ruolo di lavoro e IntelliSense richiede un ruolo di lavoro separato.

Non è possibile usare una connessione di applicazione livello dati con Esplora oggetti.

Esaminare l'utilizzo del max_worker_percent

Per trovare le statistiche sull'utilizzo delle risorse per il database per 14 giorni, eseguire una query sulla vista del catalogo di sistema sys.resource_stats . La max_worker_percent colonna mostra la percentuale di ruoli di lavoro usati rispetto al limite di lavoro per il database. Connessione al database master nel server logico per eseguire query sys.resource_statssu .

SELECT start_time, end_time, database_name, sku, avg_cpu_percent, max_worker_percent, max_session_percent 
FROM sys.resource_stats;

È anche possibile eseguire query sulle statistiche sull'utilizzo delle risorse dall'ultima ora dalla sys.dm_db_resource_stats visualizzazione a gestione dinamica. Connessione direttamente al database per eseguire query su sys.dm_db_resource_stats.

SELECT end_time, avg_cpu_percent, max_worker_percent, max_session_percent
FROM sys.dm_db_resource_stats;

Riduzione dell'utilizzo del ruolo di lavoro quando possibile

Le catene di blocco possono causare un aumento improvviso del numero di ruoli di lavoro in un database. Un volume elevato di query parallele simultanee può causare un numero elevato di ruoli di lavoro. L'aumento del massimo grado di parallelismo (MAXDOP) o l'impostazione di MAXDOP su zero può aumentare il numero di ruoli di lavoro attivi.

Valutare un evento imprevisto con ruoli di lavoro insufficienti seguendo questa procedura:

  1. Verificare se si verifica un blocco o se è possibile identificare un volume elevato di ruoli di lavoro simultanei. Eseguire la query seguente per esaminare le richieste correnti e verificare se il database restituisce l'errore 10928. Potrebbe essere necessario connettersi con la connessione amministrativa dedicata per eseguire la query.

    SELECT
        r.session_id, r.request_id, r.blocking_session_id, r.start_time, 
        r.status, r.command, DB_NAME(r.database_id) AS database_name,
        (SELECT COUNT(*) 
            FROM sys.dm_os_tasks AS t 
            WHERE t.session_id=r.session_id and t.request_id=r.request_id) AS worker_count,
        i.parameters, i.event_info AS input_buffer,
        r.last_wait_type, r.open_transaction_count, r.total_elapsed_time, r.cpu_time,
        r.logical_reads, r.writes, s.login_time, s.login_name, s.program_name, s.host_name
    FROM sys.dm_exec_requests as r
    JOIN sys.dm_exec_sessions as s on r.session_id=s.session_id
    OUTER APPLY sys.dm_exec_input_buffer (r.session_id,r.request_id) AS i
    WHERE s.is_user_process=1;
    GO
    
    1. Cercare le righe con un blocking_session_id oggetto per identificare le sessioni bloccate. Trovare ognuno blocking_session_id nell'elenco per determinare se la sessione è bloccata. Questo porterà alla fine al blocco testa. Ottimizzare la query del blocco head.

      Nota

      Per informazioni più dettagliate sulla risoluzione dei problemi relativi a query a esecuzione prolungata o blocco, vedere Informazioni e risoluzione dei problemi di blocco database SQL di Azure.

    2. Per identificare un volume elevato di ruoli di lavoro simultanei, esaminare il numero di richieste complessive e la worker_count colonna per ogni richiesta. Worker_count è il numero di ruoli di lavoro al momento campionati e può cambiare nel tempo durante l'esecuzione della richiesta. Ottimizzare le query per ridurre l'utilizzo delle risorse se la causa di un aumento dei ruoli di lavoro è query simultanee in esecuzione al livello ottimale di parallelismo. Per altre informazioni, vedere la sezione Hint/ottimizzazione di query.

  2. Valutare l'impostazione maxdop (maximum degree of parallelism) per il database.

Aumentare i limiti del ruolo di lavoro

Se il database raggiunge costantemente il limite nonostante l'indirizzamento, l'ottimizzazione delle query e la convalida dell'impostazione MAXDOP, prendere in considerazione l'aggiunta di altre risorse al database per aumentare il limite di lavoro.

Trovare i limiti delle risorse per database SQL di Azure in base al livello di servizio e alle dimensioni di calcolo:

Altre informazioni su database SQL di Azure governance delle risorse dei ruoli di lavoro.

Errore 10929: ID risorsa: 1

10929: Resource ID: 1. The %s minimum guarantee is %d, maximum limit is %d and the current usage for the database is %d. However, the server is currently too busy to support requests greater than %d for this database. See http://go.microsoft.com/fwlink/?LinkId=267637 for assistance. Otherwise, please try again later.

Errore 40501: Il servizio è attualmente occupato

40501: The service is currently busy. Retry the request after 10 seconds. Incident ID: %ls. Code: %d.

Si tratta di un errore di limitazione della limitazione del motore, che indica che vengono superati i limiti delle risorse.

Per altre informazioni sui limiti delle risorse, vedere Limiti delle risorse SQL server logici.

Errore 40544: il database ha raggiunto la quota di dimensioni

40544: The database has reached its size quota. Partition or delete data, drop indexes, or consult the documentation for possible resolutions. Incident ID: <ID>. Code: <code>.

Questo errore si verifica quando il database ha raggiunto la quota di dimensioni.

I passaggi seguenti consentono di risolvere il problema o di fornire altre opzioni:

  1. Controllare le dimensioni correnti del database usando il dashboard nel portale di Azure.

    Nota

    Per identificare le tabelle che utilizzano la maggior parte dello spazio e sono quindi potenziali candidati per la pulizia, eseguire la query di SQL seguente:

    SELECT o.name,
     SUM(p.row_count) AS 'Row Count',
     SUM(p.reserved_page_count) * 8.0 / 1024 AS 'Table Size (MB)'
    FROM sys.objects o
    JOIN sys.dm_db_partition_stats p on p.object_id = o.object_id
    GROUP BY o.name
    ORDER BY [Table Size (MB)] DESC;
    GO
    
  2. Se le dimensioni correnti non superano le dimensioni massime supportate per l'edizione, è possibile utilizzare ALTER DATABASE per aumentare l'impostazione MAXSIZE.

  3. Se il database ha già superato le dimensioni massime supportate per l'edizione, provare uno o più dei passaggi seguenti:

    • Eseguire normali attività di pulizia del database. Ad esempio, pulire i dati indesiderati usando il troncamento/eliminazione o spostare i dati in uscita usando SQL Server Integration Services (SSIS) o l'utilità di copia bulk (bcp).
    • Partizionare o eliminare dati, eliminare indici o consultare la documentazione per le possibili soluzioni.
    • Per il ridimensionamento del database, vedere Ridimensionare le risorse del database singolo e Ridimensionare le risorse del pool elastico.

Errore 40549: La sessione viene terminata perché si dispone di una transazione con esecuzione prolungata

40549: Session is terminated because you have a long-running transaction. Try shortening your transaction.

Se si verifica ripetutamente questo errore, provare a risolvere il problema seguendo questa procedura:

  1. Eseguire la query seguente per visualizzare le sessioni aperte con un valore elevato per la duration_ms colonna:

    SELECT
        r.start_time, DATEDIFF(ms,start_time, SYSDATETIME()) as duration_ms, 
    	r.session_id, r.request_id, r.blocking_session_id,  
        r.status, r.command, DB_NAME(r.database_id) AS database_name,
        i.parameters, i.event_info AS input_buffer,
        r.last_wait_type, r.open_transaction_count, r.total_elapsed_time, r.cpu_time,
        r.logical_reads, r.writes, s.login_time, s.login_name, s.program_name, s.host_name
    FROM sys.dm_exec_requests as r
    JOIN sys.dm_exec_sessions as s on r.session_id=s.session_id
    OUTER APPLY sys.dm_exec_input_buffer (r.session_id,r.request_id) AS i
    WHERE s.is_user_process=1
    ORDER BY start_time ASC;
    GO
    

    È possibile scegliere di ignorare le righe in cui la input_buffer colonna mostra una lettura di query da sys.fn_MSxe_read_event_stream: queste richieste sono correlate alle sessioni degli eventi estesi.

  2. Esaminare la blocking_session_id colonna per verificare se il blocco contribuisce alle transazioni a esecuzione prolungata.

    Nota

    Per altre informazioni sulla risoluzione dei problemi di blocco in database SQL di Azure, vedere Informazioni e risoluzione dei problemi di blocco database SQL di Azure.

  3. Prendere in batch le query. Per informazioni sull'invio in batch, vedere Come usare l'invio in batch per migliorare le prestazioni dell'applicazione database SQL.

Errore 40551: La sessione è stata terminata a causa di un utilizzo eccessivo di TEMPDB

40551: The session has been terminated because of excessive TEMPDB usage. Try modifying your query to reduce the temporary table space usage.

Per risolvere il problema, seguire questa procedura:

  1. Modificare le query per ridurre l'utilizzo dello spazio temporaneo delle tabelle.
  2. Eliminare gli oggetti temporanei dopo che non sono più necessari.
  3. Tronca le tabelle o rimuovi le tabelle inutilizzate.

Errore 40552: La sessione è stata terminata a causa di un utilizzo eccessivo dello spazio del log delle transazioni

40552: The session has been terminated because of excessive transaction log space usage. Try modifying fewer rows in a single transaction.

Per risolvere il problema, procedere con i metodi seguenti:

  • Il problema può verificarsi a causa di operazioni di inserimento, aggiornamento o eliminazione. Provare a ridurre il numero di righe eseguite immediatamente implementando l'invio in batch o la suddivisione in più transazioni più piccole.

  • Il problema può verificarsi a causa di operazioni di ricompilazione dell'indice. Per risolvere questo problema, assicurarsi che il numero di righe interessate nella tabella * (dimensione media del campo aggiornato in byte + 80) < 2 gigabyte (GB).

    Nota

    Per una ricompilazione dell'indice, le dimensioni medie del campo aggiornato devono essere sostituite dalle dimensioni medie dell'indice.

    Nota

    Per altre informazioni sulla risoluzione dei problemi di un log delle transazioni completo in database SQL di Azure e Istanza gestita di SQL di Azure, vedere Risoluzione degli errori del log delle transazioni con database SQL di Azure e Istanza gestita di SQL di Azure.

Errore 40553: La sessione è stata terminata a causa di un utilizzo eccessivo della memoria

40553: The session has been terminated because of excessive memory usage. Try modifying your query to process fewer rows.

Per risolvere questo problema, provare a ottimizzare la query.

Per una procedura di risoluzione dei problemi approfondita, vedere La query viene eseguita correttamente nel cloud?.

Per altre informazioni su altri errori di memoria insufficiente e query di esempio, vedere Risolvere gli errori di memoria insufficiente con database SQL di Azure.

Tabella dei messaggi di errore di governance delle risorse

Codice di errore Gravità Descrizione
10928 20 ID risorsa: %d. Il limite di %s per il database è %d ed è stato raggiunto. Per assistenza, vedere "http://go.microsoft.com/fwlink/?LinkId=267637".

L'ID risorsa indica la risorsa che ha raggiunto il limite. Quando l'ID risorsa = 1, questo indica che è stato raggiunto un limite di lavoro. Per altre informazioni, vedere Errore 10928: ID risorsa: 1. Il limite di richieste per il database è %d ed è stato raggiunto. Quando l'ID risorsa = 2 indica che è stato raggiunto il limite di sessione.

Altre informazioni sui limiti delle risorse:
Limiti delle risorse server SQL logiche
Limiti basati su DTU per i singoli database
Limiti basati su DTU per pool elastici
Limiti basati su vCore per i singoli database
Limiti basati su vCore per pool elastici
Istanza gestita di SQL di Azure limiti delle risorse.
10929 20 ID risorsa: %d. La %s di garanzia minima è %d, il limite massimo è %d e l'uso corrente per il database è %d. Tuttavia, il server attualmente è troppo occupato per supportare richieste superiori a %d per questo database. L'ID risorsa indica la risorsa che ha raggiunto il limite. Per i thread di lavoro, l’ID risorsa = 1. Per le sessioni, l'ID risorsa = 2. Per altre informazioni, vedere:
Limiti di risorse server SQL logici
Limiti basati su DTU per i singoli database
Limiti basati su DTU per pool elastici
Limiti basati su vCore per i singoli database
Limiti basati su vCore per pool elastici
Istanza gestita di SQL di Azure limiti delle risorse.
In caso contrario, riprovare più tardi.
40544 20 Il database ha raggiunto la quota delle dimensioni. Partizionare o eliminare dati, eliminare indici o consultare la documentazione per le possibili soluzioni. Per il ridimensionamento del database, vedere Ridimensionare le risorse del database singolo e Ridimensionare le risorse del pool elastico.
40549 16 Sessione terminata perché è presente una transazione a lunga esecuzione. Provare ad abbreviare la transazione. Per informazioni sul batch, vedere Come usare il batch per migliorare le prestazioni dell'applicazione database SQL.
40550 16 Sessione terminata perché ha acquisito troppi blocchi. Provare a leggere o modificare meno righe in una sola transazione. Per informazioni sul batch, vedere Come usare il batch per migliorare le prestazioni dell'applicazione database SQL.
40551 16 La sessione è stata terminata a causa dell'utilizzo eccessivo di TEMPDB . Provare a modificare la query per ridurre l'utilizzo dello spazio delle tabelle temporanee.

Se si usano oggetti temporanei, liberare spazio nel database TEMPDB rimuovendo gli oggetti temporanei se non sono più necessari per la sessione. Per altre informazioni sui limiti di tempdb in database SQL, vedere Database Tempdb in database SQL.
40552 16 Sessione terminata a causa di un utilizzo eccessivo dello spazio del log delle transazioni. Provare a modificare meno righe in una sola transazione. Per informazioni sul batch, vedere Come usare il batch per migliorare le prestazioni dell'applicazione database SQL.

Se si eseguono inserimenti bulk usando l'utilità bcp.exe o la classe System.Data.SqlClient.SqlBulkCopy, provare a usare le opzioni -b batchsize o BatchSize per limitare il numero di righe copiate nel server in ogni transazione. In caso di ricompilazione di un indice con l'istruzione ALTER INDEX, provare a usare l'opzione REBUILD WITH ONLINE = ON. Per informazioni sulle dimensioni del log delle transazioni per il modello di acquisto vCore, vedere:
Limiti basati su vCore per i singoli database
Limiti basati su vCore per pool elastici
Istanza gestita di SQL di Azure limiti delle risorse.
40553 16 Sessione terminata a causa di un utilizzo eccessivo della memoria. Provare a modificare la query per elaborare meno righe.

La riduzione del numero di operazioni ORDER BY e GROUP BY nel codice Transact-SQL consente di ridurre i requisiti di memoria della query. Per il ridimensionamento del database, vedere Ridimensionare le risorse del database singolo e Ridimensionare le risorse del pool elastico. Per altre informazioni sugli errori di memoria e sulle query di esempio, vedere Risolvere i problemi relativi agli errori di memoria con database SQL di Azure.

Errori relativi al pool elastico

Di seguito sono elencati gli errori riguardanti la creazione e l'uso di pool elastici:

Codice di errore Gravità Descrizione Azione correttiva
1132 17 Il pool elastico ha raggiunto il limite di archiviazione. L'utilizzo dell'archiviazione per il pool elastico non può superare (%d) MB. Tentativo di scrittura dei dati in un database quando viene raggiunto il limite di archiviazione del pool elastico. Per informazioni sui limiti delle risorse, vedere:
Limiti basati su DTU per pool elastici
Limiti basati su vCore per pool elastici.
Prendere in considerazione l'aumento delle DTU e/o l'aggiunta di risorse di archiviazione al pool elastico, se possibile, per aumentare il limite di archiviazione, ridurre le risorse di archiviazione usate dai singoli database all'interno del pool elastico o rimuovere database dal pool elastico. Per il ridimensionamento del pool elastico, vedere Ridimensionare le risorse del pool elastico. Per altre informazioni sulla rimozione dello spazio inutilizzato dai database, vedere Gestire lo spazio file per i database in database SQL di Azure.
10929 16 La %s di garanzia minima è %d, il limite massimo è %d e l'uso corrente per il database è %d. Tuttavia, il server attualmente è troppo occupato per supportare richieste superiori a %d per questo database. Per informazioni sui limiti delle risorse, vedere:
Limiti basati su DTU per pool elastici
Limiti basati su vCore per pool elastici.
In caso contrario, riprovare più tardi. Numero minimo DTU/vCore per database; numero massimo DTU/vCore per database. Numero totale di lavoratori simultanei in tutti i database nel pool elastico ha tentato di superare il limite del pool.
Prendere in considerazione l'aumento delle DTU o dei vCore del pool elastico, se possibile, per aumentare il limite del ruolo di lavoro, o rimuovere database dal pool elastico.
40844 16 Il database '%ls' sul Server '%ls' è un database versione '%ls' in un pool elastico e non può avere una relazione di copia continua. N/D
40857 16 Pool elastico non trovato per il server: '%ls', nome del pool elastico: '%ls'. Il pool elastico specificato non esiste nel server specificato. Fornire un nome pool elastico valido.
40858 16 Il pool elastico '%ls' esiste già nel server: '%ls'. Il pool elastico specificato esiste già nel server specificato. Fornire un nuovo nome pool elastico.
40859 16 Il pool elastico non supporta il livello di servizio '%ls'. Il livello di servizio specificato non è supportato per il provisioning del pool elastico. Fornire l'edizione corretta oppure lasciare vuoto il livello di servizio per utilizzare il livello di servizio predefinito.
40860 16 La combinazione di pool elastico '%ls' e di obiettivo di servizio '%ls' non è valida. Il pool elastico e il livello di servizio possono essere specificati insieme solo se il tipo di risorsa specificato è 'ElasticPool'. Specificare la combinazione corretta di pool elastico e livello di servizio.
40861 16 L'edizione del database '%.*ls' non può essere diversa dal livello di servizio del pool elastico '%.*ls'. L'edizione del database è diversa dal livello di servizio del pool elastico. Non specificare un'edizione del database diversa dal livello di servizio del pool elastico. Si noti che non è necessario specificare l'edizione del database.
40862 16 Il nome del pool elastico deve essere specificato se viene specificato l'obiettivo di servizio del pool elastico. L’obiettivo di servizio del pool elastico non identifica in modo univoco un pool elastico. Specificare il nome del pool elastico se si usa l'obiettivo di servizio del pool elastico.
40864 16 Le DTU per il pool elastico devono essere almeno (%d) DTU per il livello di servizio '%.*ls'. Tentativo di impostare le DTU per il pool elastico al di sotto del limite minimo. Riprovare a impostare le DTU per il pool elastico almeno al limite minimo.
40865 16 Le DTU per il pool elastico non possono superare (%d) DTU per il livello di servizio '%.*ls'. Tentativo di impostare le DTU per il pool elastico al di sopra del limite massimo. Riprovare a impostare le DTU per il pool elastico non oltre il limite massimo.
40867 16 Il numero massimo di DTU per database deve essere almeno (%d) per il livello di servizio "%.*ls". Tentativo di impostare il numero massimo di DTU per database al di sotto del limite supportato. Prendere in considerazione l'uso del livello di servizio del pool elastico che supporta l'impostazione desiderata.
40868 16 Il numero massimo di DTU per database non può superare (%d) per il livello di servizio '%.*ls'. Tentativo di impostare il numero massimo di DTU per database oltre il limite supportato. Prendere in considerazione l'uso del livello di servizio del pool elastico che supporta l'impostazione desiderata.
40870 16 Il numero minimo di DTU per database non può superare (%d) per il livello di servizio '%.*ls'. Tentativo di impostare il numero minimo di DTU per database oltre il limite supportato. Prendere in considerazione l'uso del livello di servizio del pool elastico che supporta l'impostazione desiderata.
40873 16 Il numero di database (%d) e il numero minimo di DTU per ogni database (%d) non può superare le DTU del pool elastico (%d). Il tentativo di specificare il numero minimo di DTU per i database nel pool elastico che supera il numero di DTU del pool elastico. Prendere in considerazione l'aumento delle DTU del pool elastico, ridurre il numero minimo di DTU per database o diminuire il numero di database nel pool elastico.
40877 16 Impossibile eliminare un pool elastico, a meno che non contenga alcun database. Il pool elastico contiene uno o più database e pertanto non può essere eliminato. Rimuovere i database dal pool elastico per eliminarlo.
40881 16 Il pool elastico '%.*ls' ha raggiunto il limite del numero di database. Il limite per il numero di database per il pool elastico non può superare (%d) per un pool elastico con (%d) DTU. Tentativo di creare o aggiungere il database al pool elastico quando è stato raggiunto il limite del numero di database del pool elastico. Prendere in considerazione l'aumento delle DTU del pool elastico, se possibile, per aumentare il limite dei relativi database o rimuovere i database dal pool elastico.
40889 16 Impossibile ridurre il limite delle DTU o della memoria per il pool elastico '%.*ls' dal momento che tale operazione non fornirebbe spazio di archiviazione sufficiente per i relativi database. Tentativo di ridurre il limite di archiviazione del pool elastico al di sotto del relativo utilizzo di memoria. Prendere in considerazione la riduzione dell'uso della memoria dei singoli database nel pool elastico o rimuovere i database dal pool per ridurre le relative DTU o il limite di archiviazione.
40891 16 Il numero minimo di DTU per database (%d) non può superare il numero massimo DTU per database (%d). Tentativo di impostare il numero minimo di DTU per database su un valore superiore al numero massimo di DTU per database. Verificare che il numero minimo di DTU per database non superi il numero massimo di DTU per database.
TBD 16 Le dimensioni di archiviazione di un singolo database in un pool elastico non possono superare le dimensioni massime consentite dal pool elastico del livello di servizio "%.*ls". Le dimensioni massime per il database superano le dimensioni massime consentite per il livello di servizio del pool elastico. Impostare le dimensioni massime del database entro i limiti delle dimensioni massime consentite dal livello di servizio del pool elastico.

Impossibile aprire il database "master" richiesto dall'account di accesso. Accesso non riuscito

Questo problema si verifica perché l'account non dispone dell'autorizzazione per accedere al master database. Per impostazione predefinita, tuttavia, SQL Server Management Studio (SSMS) tenta di connettersi al master database.

Per risolvere il problema, seguire questa procedura:

  1. Nella schermata di accesso di SSMS selezionare Opzioni e quindi proprietà connessione.

  2. Nel campo Connessione al database immettere il nome predefinito del database dell'utente come database di accesso predefinito e quindi selezionare Connessione.

    Connection properties

Errori di sola lettura

Se si tenta di scrivere in un database di sola lettura, verrà visualizzato un errore. In alcuni scenari, la causa dello stato di sola lettura del database potrebbe non essere immediatamente chiara.

Errore 3906: Impossibile aggiornare il database "DatabaseName" perché il database è di sola lettura.

Quando si tenta di modificare un database di sola lettura, verrà generato l'errore seguente.

Msg 3906, Level 16, State 2, Line 1
Failed to update database "%d" because the database is read-only.

È possibile che si sia connessi a una replica di sola lettura

Sia per database SQL di Azure che per Istanza gestita di SQL di Azure, è possibile che si sia connessi a un database in una replica di sola lettura. In questo caso, la query seguente che usa la funzione DATABASEPROPERTYEX() restituirà READ_ONLY:

SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability');
GO

Se ci si connette usando SQL Server Management Studio, verificare se è stato specificato ApplicationIntent=ReadOnly nella scheda Parametri di connessione aggiuntivinelle opzioni di connessione.

Se la connessione proviene da un'applicazione o da un client usando una stringa di connessione, verificare se la stringa di connessione ha specificato ApplicationIntent=ReadOnly. Per altre informazioni, vedere Connessione a una replica di sola lettura.

Il database può essere impostato su sola lettura

Se si usa database SQL di Azure, è possibile che il database stesso sia stato impostato su sola lettura. È possibile verificare lo stato del database con la query seguente:

SELECT name, is_read_only
FROM sys.databases
WHERE database_id = DB_ID();

È possibile modificare lo stato di sola lettura per un database in database SQL di Azure tramite ALTER DATABASE Transact-SQL. Non è attualmente possibile impostare un database in un'istanza gestita su sola lettura.

Verificare se un errore è causato da un problema di connettività

Per verificare se un errore è causato da un problema di connettività, esaminare l'analisi dello stack per i frame che mostrano le chiamate per aprire una connessione come quelle seguenti (si noti il riferimento alla classe SqlConnection ):

System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
 at System.Data.SqlClient.SqlConnection.Open()
 at AzureConnectionTest.Program.Main(String[] args)
ClientConnectionId:<Client connection ID>

Quando l'eccezione viene attivata da problemi di query, si noterà uno stack di chiamate simile al seguente (si noti il riferimento alla classe SqlCommand ). In questo caso, ottimizzare le query.

  at System.Data.SqlClient.SqlCommand.ExecuteReader()
  at AzureConnectionTest.Program.Main(String[] args)
  ClientConnectionId:<Client ID>

Per altre indicazioni sull'ottimizzazione delle prestazioni, vedere le risorse seguenti:

Steps to fix common connection issues (Passaggi per risolvere i problemi di connessione comuni)

  1. Assicurarsi che TCP/IP sia abilitato come protocollo client nel server applicazioni. Per altre informazioni, vedere Configurare i protocolli client. Nei server applicazioni in cui non sono installati strumenti di SQL, verificare che TCP/IP sia abilitato eseguendo cliconfg.exe (utilità di rete client SQL Server).

  2. Controllare la stringa di connessione dell'applicazione per assicurarsi che sia configurata correttamente. Ad esempio, assicurarsi che la stringa di connessione specifichi la porta corretta (1433) e il nome completo del server. Vedere Ottenere informazioni di connessione.

  3. Provare ad aumentare il valore di timeout della connessione. È consigliabile usare un timeout di connessione di almeno 30 secondi.

  4. Testare la connettività tra il server applicazioni e il database SQL di Azure usando SQL Server Management Studio (SSMS), un file UDL, un ping o telnet. Per altre informazioni, vedere Risoluzione dei problemi di connettività e Diagnostica per i problemi di connettività.

    Nota

    Come passaggio per la risoluzione dei problemi, è anche possibile testare la connettività in un altro computer client.

  5. Come procedura consigliata, assicurarsi che sia presente la logica di ripetizione dei tentativi. Per altre informazioni sulla logica di ripetizione dei tentativi, vedere Risolvere gli errori temporanei e gli errori di connessione per database SQL.

Se questi passaggi non risolvono il problema, provare a raccogliere altri dati e quindi contattare il supporto tecnico. Se l'applicazione è un servizio cloud, abilitare la registrazione. Questo passaggio restituisce un timestamp UTC dell'errore. Inoltre, database SQL restituisce l'ID di traccia. I servizi di supporto tecnico Microsoft possono usare queste informazioni.

Per altre informazioni su come abilitare la registrazione, vedere Abilitare la registrazione diagnostica per le app in Servizio app di Azure.

Passaggi successivi

Altre informazioni sugli argomenti correlati sono disponibili negli articoli seguenti: