Procedure consigliate e risoluzione dei problemi di backup di SQL Server nell'URL per l'archiviazione BLOB di Microsoft Azure

Si applica a:Istanza gestita di SQL Di Azure di SQL Server

Questo articolo include procedure consigliate e suggerimenti per la risoluzione dei problemi per il backup e il ripristino di SQL Server in Archiviazione BLOB di Microsoft Azure.

Per altre informazioni sull'uso di Archiviazione BLOB di Azure per operazioni di backup o ripristino di SQL Server, vedere:

Gestire i backup

Nell'elenco seguente sono inclusi i consigli generali sulla gestione dei backup:

  • Per evitare la sovrascrittura accidentale dei BLOB, è consigliabile l'utilizzo di un nome file univoco per ogni backup.

  • Quando si crea un contenitore, è consigliabile impostare il livello di accesso su privato, in modo che solo gli utenti o account che possono fornire le informazioni di autenticazione richieste possano leggere o scrivere i BLOB nel contenitore.

  • Per i database di SQL Server in un'istanza di SQL Server in esecuzione in una macchina virtuale di Azure, usare un account di archiviazione nella stessa area della macchina virtuale per evitare i costi di trasferimento dei dati tra aree. L'utilizzo della stessa area garantisce anche prestazioni ottimali per le operazioni di backup e ripristino.

  • Un'attività di backup non completata correttamente può generare un file di backup non valido. Sono consigliate l'identificazione periodica dei backup non completati e l'eliminazione dei file BLOB. Per altre informazioni, vedere Eliminazione dei file BLOB di backup con lease attivi

  • L'utilizzo dell'opzione WITH COMPRESSION durante il backup consente di ridurre i costi di archiviazione e quelli delle transazioni di archiviazione. Inoltre, tramite questa opzione è possibile diminuire il tempo necessario per completare il processo di backup.

  • Impostare gli argomenti MAXTRANSFERSIZE e BLOCKSIZE come consigliato in Backup di SQL Server nell'URL.

  • SQL Server è indipendente dal tipo di ridondanza di archiviazione usata. Il backup in BLOB di pagine e BLOB in blocchi è supportato per ogni ridondanza dell'archiviazione (LRS\ZRS\GRS\RA-GRS\RA-GZRS\etc.).

Gestire file di grandi dimensioni

  • L'operazione di backup di SQL Server usa più thread per ottimizzare il trasferimento dei dati in Archiviazione BLOB di Azure. Le prestazioni, tuttavia, dipendono da vari fattori, ad esempio la larghezza di banda del fornitore di software indipendente e le dimensioni del database. Se si prevede di eseguire il backup di database o filegroup di grandi dimensioni da un database di SQL Server locale, è consigliabile eseguire prima alcuni test della velocità effettiva. I contratti di servizio della risorsa di archiviazione di Azure presentano tempi di elaborazione massimi per i BLOB che è possibile prendere in considerazione.

  • L'uso dell'opzione WITH COMPRESSION consigliata nella sezione Gestione dei backup è importante quando si esegue il backup di file di grandi dimensioni.

Risolvere i problemi di backup o ripristino dall'URL

Di seguito sono riportati alcuni modi rapidi per risolvere gli errori durante il backup o il ripristino da Archiviazione BLOB di Azure.

Per evitare errori dovuti a opzioni o limitazioni non supportate, esaminare l'elenco delle limitazioni e il supporto per le informazioni sui comandi BACKUP e RESTORE, nell'articolo Backup e ripristino di SQL Server con Archiviazione BLOB di Microsoft Azure.

Inizializzazione non riuscita

L'esecuzione di backup paralleli nello stesso BLOB comporta il mancato completamento di uno dei backup con conseguente errore Inizializzazione non riuscita .

  • In SQL Server 2016 (13.x) e versioni successive il BLOB in blocchi è preferibile per Il backup nell'URL.

  • Se si usano BLOB di pagine con l'URL BACKUP TO, è possibile usare il flag di traccia 3051 per attivare la registrazione in un log degli errori specifico con il formato seguente in: BackupToUrl-\<instname>-\<dbname>-action-\<PID>.log, dove \<action> è uno dei seguenti:

    • DB
    • FILELISTONLY
    • LABELONLY
    • HEADERONLY
    • VERIFYONLY

È anche possibile trovare informazioni esaminando il Visualizzatore eventi di Windows, in Registri applicazioni con il nome SQLBackupToUrl.

Impossibile eseguire la richiesta a causa di un errore del dispositivo di I/O.

Quando si effettua il backup di database di grandi dimensioni, è consigliabile considerare l’uso di COMPRESSION, MAXTRANSFERSIZE, BLOCKSIZE e più argomenti URL. Vedere Backing up a VLDB to Azure Blob Storage (Backup di un VLDB in Archiviazione BLOB di Azure)

Errore:

Msg 3202, Level 16, State 1, Line 1
Write on "https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak" failed:
1117(The request could not be performed because of an I/O device error.)
Msg 3013, Level 16, State 1, Line 1
BACKUP DATABASE is terminating abnormally.

Una soluzione di esempio:

BACKUP DATABASE TestDb
TO URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak',
URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_1.bak',
URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_2.bak'
WITH COMPRESSION, MAXTRANSFERSIZE = 4194304, BLOCKSIZE = 65536;

Il segno di file di messaggio nel dispositivo non è allineato.

Quando si esegue il ripristino da un backup compresso, è possibile che venga visualizzato l'errore seguente:

SqlException 3284 occurred. Severity: 16 State: 5
Message Filemark on device 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak' is not aligned.
Reissue the Restore statement with the same block size used to create the backupset: '65536' looks like a possible value.

Per risolvere il problema, eseguire nuovamente l'istruzione RESTORE con il valore BLOCKSIZE = 65536 specificato.

l'attività di backup non completata può generare BLOB con lease attivi.

Errore durante il backup a causa di BLOB con lease attivi: Failed backup activity can result in blobs with active leases.

Se si tenta di nuovo un'istruzione di backup, quest'ultimo potrebbe non essere completato e potrebbe essere visualizzato un errore simile al seguente:

Backup to URL received an exception from the remote endpoint. Exception Message:
The remote server returned an error: (412) There is currently a lease on the blob and no lease ID was specified in the request.

Se un'istruzione RESTORE viene tentata in un file BLOB di backup con un lease attivo, l'operazione di ripristino non viene completata e viene visualizzato un errore simile al seguente:

Exception Message: The remote server returned an error: (409) Conflict..

Quando si verifica un errore di questo tipo, i file BLOB devono essere eliminati. Per altre informazioni su questo scenario e su come risolvere il problema, vedere Eliminazione dei file BLOB di backup con lease attivi

Errore del sistema operativo 50: la richiesta non è supportata

Quando si esegue il backup di un database, è possibile che venga visualizzato l'errore Operating system error 50(The request is not supported) per i motivi seguenti:

  • L'account di archiviazione specificato non è per utilizzo generico V1/V2.
  • Al momento della creazione delle credenziali, all’inizio del token di firma di accesso condiviso è presente un simbolo ?. In questo caso, rimuovere il simbolo.
  • L’attuale connessione non è in grado di connettersi all’account di archiviazione dal computer corrente usando Storage Explorer o SQL Server Management Studio (SSMS).
  • I criteri assegnati al token di firma di accesso condiviso sono scaduti. Creare nuovi criteri usando Azure Storage Explorer e creare un nuovo token di firma di accesso condiviso usando i criteri oppure modificare le credenziali e riprovare a eseguire il backup.

Errori di autenticazione

WITH CREDENTIAL è una nuova opzione e necessaria per eseguire il backup o il ripristino da Archiviazione BLOB di Azure.

Di seguito sono riportati i possibili errori correlati alle credenziali: The credential specified in the **BACKUP** or **RESTORE** command does not exist.

Per evitare questo problema, è possibile includere istruzioni T-SQL per creare le credenziali se non ne esiste una nell'istruzione di backup. Di seguito è riportato un esempio pratico:

IF NOT EXISTS (
   SELECT *
   FROM sys.credentials
   WHERE credential_identity = 'mycredential'
)
CREATE CREDENTIAL [<credential name>]
   WITH IDENTITY = 'mystorageaccount',
      SECRET = '<storage access key>';

La credenziale esiste, ma l'account di accesso usato per eseguire il comando di backup non dispone delle autorizzazioni per accedere alle credenziali. Usare un account nel ruolo db_backupoperator con le autorizzazioni Alter any credential ( Modifica credenziali ).

Verificare il nome dell'account di archiviazione e i valori di chiave. Le informazioni archiviate nelle credenziali devono corrispondere ai valori delle proprietà dell'account di archiviazione di Azure usati nelle operazioni di backup e ripristino.

Errori 400 (richiesta non valida)

Se si usa SQL Server 2012, è possibile che si verifichi un errore durante l'esecuzione di un backup simile al seguente:

Backup to URL received an exception from the remote endpoint. Exception Message:
The remote server returned an error: (400) Bad Request..

Ciò è causato dalla versione TLS supportata dall'account di archiviazione di Azure. Modifica della versione TLS supportata o uso della soluzione alternativa elencata in KB4017023.

Errori del proxy

Se si utilizzano server proxy per accedere a Internet, è possibile che si verifichino i problemi indicati di seguito:

Limitazione delle connessioni da parte dei server proxy

I server proxy possono avere impostazioni che limitano il numero di connessioni al minuto. Il backup su URL è un processo multithread e pertanto può superare il limite. In questo caso, il server proxy termina la connessione. Per risolvere questo problema, modificare le impostazioni proxy in modo che SQL Server non usi il proxy. Di seguito sono riportati alcuni esempi di tipi o messaggi di errore visualizzati nel log degli errori:

Write on "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak" failed: Backup to URL received an exception from the remote endpoint. Exception Message: Unable to read data from the transport connection: The connection was closed.
A nonrecoverable I/O error occurred on file "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak:" Error could not be gathered from Remote Endpoint.

Msg 3013, Level 16, State 1, Line 2

BACKUP DATABASE is terminating abnormally.
BackupIoRequest::ReportIoError: write failure on backup device https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak'. Operating system error Backup to URL received an exception from the remote endpoint. Exception Message: Unable to read data from the transport connection: The connection was closed.

Se si usano BLOB di pagine, si attiva la registrazione dettagliata usando il flag di traccia 3051, è anche possibile visualizzare il messaggio seguente nei log: HTTP status code 502, HTTP Status Message Proxy Error (The number of HTTP requests per minute exceeded the configured limit. Contact your ISA Server administrator.)

Impostazioni proxy predefinite non selezionate

A volte le impostazioni predefinite non vengono rilevate causando errori di autenticazione proxy, ad esempio:

A nonrecoverable I/O error occurred on file "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak:" Backup to URL received an exception from the remote endpoint. Exception Message: The remote server returned an error: (407)* **Proxy Authentication Required.

Per risolvere il problema, creare un file di configurazione che consenta al processo di backup su URL di utilizzare le impostazioni predefinite del proxy effettuando i passaggi indicati di seguito.

  1. Creare un file di configurazione denominato BackuptoURL.exe.config con il contenuto XML seguente:

    <?xml version ="1.0"?>
    <configuration>
        <system.net>
            <defaultProxy enabled="true" useDefaultCredentials="true">
                <proxy usesystemdefault="true" />
            </defaultProxy>
        </system.net>
    </configuration>
    
  2. Inserire il file di configurazione nella cartella Binn dell'istanza di SQL Server. Ad esempio, se SQL Server è installato nell'unità C del computer, posizionare il file di configurazione in C:\Program Files\Microsoft SQL Server\MSSQL13.\<InstanceName>\MSSQL\Binn.

Errori comuni e soluzioni

Problema Soluzione
Errore 3063: scrittura nel dispositivo BLOB in blocchi di backup https://storageaccount/container/name.bak non riuscita. Il dispositivo ha raggiunto il limite di blocchi consentiti. Per risolvere questo problema, eseguire lo striping della destinazione del backup con più file e assicurarsi di usare i parametri seguenti nel comando di backup: COMPRESSION, MAXTRANSFERSIZE = 4194304, BLOCKSIZE = 65536.
Errore 3035: il backup differenziale ha esito negativo per uno o più database. Ciò si verifica se è stato configurato il servizio Backup di Azure per eseguire il backup di database SQL o uno snapshot di macchina virtuale (VM), che non crea un backup di sola copia, causando l'esito negativo del piano di manutenzione o del processo di SQL Agent su richiesta. Per risolvere questo problema, aggiungere queste chiavi del Registro di sistema alle macchine virtuali che ospitano istanze di SQL Server nella chiave [HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\BCDRAGENT] del Registro di sistema e aggiungere "USEVSSCOPYBACKUP"="TRUE".
Errore 3201: Il backup non riesce con - Errore del sistema operativo 50 (la richiesta non è supportata). Rigenerare il token di firma di accesso condiviso usando Storage Explorer: è possibile creare un nuovo criterio usando Azure Storage Explorer e creare un nuovo token di firma di accesso condiviso con tale criterio da Azure Storage Explorer. Creare nuovamente le credenziali usando questo nuovo token di firma di accesso condiviso generato da Archiviazione di Azure e riprovare a eseguire il backup. Per altre informazioni, vedere Problemi noti relativi all'URL BACKUP TO. Assicurarsi che il gruppo di sicurezza di rete e/o il firewall consenta la connessione in ingresso e in uscita sulle porte 1433 e 443.
Errore 3271: Il backup non riesce a causa di un errore TLS - Il backup nell'URL ha ricevuto un'eccezione dall'endpoint remoto. Questo problema può verificarsi nelle versioni di SQL Server 2012, 2014 e 2016. Il backup in un URL del servizio di archiviazione BLOB di Microsoft Azure non è compatibile con TLS 1.2 e può essere corretto seguendo le istruzioni riportate in KB4017023.
Errore 3271: il backup su URL ha ricevuto un'eccezione dall'endpoint remoto. Messaggio di eccezione: non è stato possibile risolvere il nome remoto. Verrà visualizzato questo messaggio se sono stati usati credenziali, segreto o chiave di firma di accesso condiviso non corretti per configurare il backup. Rimuovere le credenziali e ricrearle. Per SQL Server 2012/2014, usare l'identità e la chiave di accesso dell'account di archiviazione e per SQL Server 2016 e versioni successive, usare la firma di accesso condiviso.
Errore 18210: eccezione: il server remoto ha restituito un errore: (400) Richiesta non valida. Per risolvere il problema, modificare la versione minima di TLS per l'account di archiviazione in 1.0 (versione minima tls di configurazione>dell'account di archiviazione>) o abilitare la crittografia avanzata, come documentato in KB4017023.
Messaggio di eccezione: il server remoto ha restituito un errore: (412) Sul BLOB è ancora attivo un lease. Nessun ID lease è stato specificato nella richiesta. Identificare i BLOB in Azure Storage Explorer con una dimensione di 1 TB, interrompere il lease, eliminare il BLOB e ripetere l'operazione di backup.
Errore: il server remoto ha restituito un errore: (403) Accesso negato. Ricreare l'account di archiviazione, le credenziali e il token di firma di accesso condiviso per risolvere il problema.
Il backup per il database da 1 TB non riesce in SQL Server 2012/2014. I backup da 1 TB sono una limitazione nota nei BLOB di pagine precedenti a SQL Server 2016. Usare la compressione dei backup aggiungendo la clausola "WITH COMPRESSION" all'istruzione di backup T-SQL o aggiornando l'istanza di SQL Server a SQL Server 2016 o versione successiva.
Errore: il backup su URL ha ricevuto un'eccezione dall'endpoint remoto. Messaggio di eccezione: il server remoto ha restituito un errore: (416) L'intervallo di pagine specificato non è valido. Questo problema può verificarsi se si usa SQL Server 2012/2014 e le dimensioni del backup aumentano a 1 TB. Eseguire lo striping dei file di backup e/o usare la compressione dei backup per risolvere il problema.
Il backup ha avuto esito negativo durante l'uso di un piano di manutenzione. Il piano di manutenzione presenta alcuni bug. Provare a usare T-SQL per eseguire il backup. Se T-SQL funziona, è possibile creare un processo di SQL Agent da eseguire per eseguire il backup dei database.
Il backup ha avuto esito negativo perché sono stati raggiunti i limiti della macchina virtuale. Se si verificano errori che il limite di operazioni di I/O al secondo del disco/macchina virtuale è stato raggiunto, i backup potrebbero rallentare o non riuscire. Per monitorare i limiti di operazioni di I/O al secondo/macchina virtuale, usare metriche di Monitoraggio di Azure e ridimensionare la macchina virtuale/disco, se necessario, per risolvere il problema.
Il server remoto ha restituito un errore: (409) Conflitto per SQL Server 2012/2014" Gli account di archiviazione con spazio dei nomi gerarchico sono dotati di BLOB in blocchi, non BLOB di pagine. Gli account di archiviazione senza questa funzionalità non devono essere usati per l'URL BACKUP TO in SQL Server 2014.

Passaggi successivi