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

Si applica a:SQL ServerIstanza gestita di SQL di Azure

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

Per altre informazioni sull'uso di Archiviazione BLOB di Azure per le operazioni di backup e 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, è necessario 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, utilizzare un account di archiviazione nella stessa area della macchina virtuale per evitare i costi di trasferimento dei dati tra le 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 di archiviazione (archiviazione con ridondanza locale, archiviazione con ridondanza geografica della zona, archiviazione con ridondanza geografica, archiviazione con ridondanza geografica e accesso in lettura, archiviazione con ridondanza geografica della zona e accesso in lettura, e così via).

Gestire file di grandi dimensioni

Nell'operazione di backup di SQL Server vengono usati più thread per ottimizzare il trasferimento dei dati ad 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 intende eseguire il backup di database o filegroup di grandi dimensioni da un database di SQL Server locale, è necessario eseguire innanzitutto 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 come consigliato nella sezione Gestisci backup è importante quando si esegue il backup di file di grandi dimensioni.

Risolvere i problemi di backup nell'URL o di ripristino dall'URL

Di seguito sono elencate alcune modalità rapide per la risoluzione di errori durante l'esecuzione del backup in Archiviazione BLOB di Azure o del ripristino dallo stesso.

Per evitare errori a causa di opzioni o limitazioni non supportate, esaminare l'elenco delle limitazioni e le informazioni sul supporto dei 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 BACKUP TO URL, è 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> è una delle opzioni seguenti:

    • DB
    • FILELISTONLY
    • LABELONLY
    • HEADERONLY
    • VERIFYONLY

È inoltre 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 Backup di un VLDB all'archivio 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 contrassegno di file del messaggio 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 all’output 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.
  • Il certificato radice non è presente nell'archivio dei certificati radice attendibili. Per ulteriori informazioni, vedere Autorità di certificazione principale di Azure.

Errori di autenticazione

WITH CREDENTIAL è una nuova opzione ed è necessaria per le operazioni di backup in Archiviazione BLOB di Azure e di ripristino dallo stesso.

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 qualora non siano presenti 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>';

Le credenziali esistono, ma all’accesso utilizzato per eseguire il comando di backup non sono associate autorizzazioni per accedere alle credenziali. Usare un account nel ruolo db_backupoperator con autorizzazioni Modifica qualsiasi credenziale.

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)

Con l'uso di SQL Server 2012 (11.x) potrebbe verificarsi un errore durante l'esecuzione di un backup simile all'output 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 dell’archiviazione thread-local supportata dall'account di archiviazione di Azure. Modifica della versione dell’archiviazione thread-local supportata o uso della soluzione alternativa illustrata in KB4017023.

Errori del proxy

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

Limitazione della connessione da parte dei server proxy

Nei server proxy possono essere presenti 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 il problema, modificare le impostazioni del proxy in modo che non venga utilizzato in SQL Server. 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.

Usando BLOB di pagine, si abilita la registrazione dettagliata mediante il flag di traccia 3051, è inoltre possibile che nei log venga visualizzato il messaggio seguente: 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 rilevate

Le impostazioni predefinite non vengono talvolta rilevate, motivo per il quale si verificano errori di autenticazione del proxy come:

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 viene installato nell'unità C del computer, inserire il file di configurazione in C:\Program Files\Microsoft SQL Server\MSSQL13.\<InstanceName>\MSSQL\Binn.

  3. BackuptoURL.exe non viene chiamato quando si usano chiavi di firma di accesso condiviso, ma viene attivato quando si usa una chiave di accesso. Assicurarsi di usare le chiavi di accesso, o potrebbe comparire l'errore seguente:

    Errore del sistema operativo 50 (La richiesta non è supportata)

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. Questo si verifica se il servizio Backup di Azure è stato configurato in modo da eseguire il backup dei database SQL o dello snapshot di una macchina virtuale, che non crea un backup di sola copia, causando l'esito negativo dei backup su richiesta del piano di manutenzione o del processo SQL Agent. Per risolvere il problema, aggiungere queste chiavi del Registro di sistema nelle macchine virtuali che ospitano istanze di SQL Server nella chiave del Registro di sistema [HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\BCDRAGENT] e aggiungere "USEVSSCOPYBACKUP"="TRUE".
Errore 3201: il backup ha esito negativo e viene visualizzato Errore del sistema operativo 50 (la richiesta non è supportata). Rigenerare il token di firma di accesso condiviso con 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 al BACKUP NELL’URL. Assicurarsi che il gruppo di sicurezza di rete (NSG) e/o il firewall consenta la connessione in ingresso e in uscita alle porte 1433 e 443.
Errore 3271: il backup ha esito negativo a causa dell’errore TLS: Il backup su URL ha ricevuto un'eccezione dall'endpoint remoto. Questo problema può verificarsi in SQL Server versioni 2012, 2014 e 2016. Il backup nell'URL del servizio Archiviazione BLOB di Microsoft Azure non è compatibile con TLS 1.2 e può essere corretto seguendo le istruzioni 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. Viene 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 la chiave di accesso e identità 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 risolverlo, passare dalla versione di TLS minima dell'account di archiviazione alla versione 1.0 (Account di archiviazione>Configurazione>Versione di TLS minima) oppure abilitare la crittografia avanzata come illustrato 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 in Azure Storage Explorer i BLOB con dimensioni pari a 1 TB, interrompere il lease, eliminare il BLOB e riprovare l'operazione di backup.
Errore: il server remoto ha restituito un errore: (403) Accesso negato. Per risolvere il problema, creare di nuovo l'account di archiviazione, le credenziali e il token di firma di accesso condiviso.
Il backup per il database da 1 TB ha esito negativo in SQL Server 2012/2014. I backup da 1 TB sono una limitazione nota nei BLOB di pagine prima di SQL Server 2016 (13.x). Usare la compressione backup aggiungendo la clausola "WITH COMPRESSION" all'istruzione di backup T-SQL o aggiornando l'istanza di SQL Server a SQL Server 2016 (13.x) e versioni successive.
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 potrebbe verificarsi se si usa SQL Server 2012 (11.x) e SQL Server 2014 (12.x) e se 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 per eseguire il backup dei database.
Il backup ha avuto esito negativo perché sono stati raggiunti i limiti della macchina virtuale. Se si ricevono errori relativi al raggiungimento del limite della macchina virtuale o di operazioni di I/O al secondo su disco, i backup potrebbero rallentare o avere esito negativo. Per monitorare i limiti di operazioni di I/O al secondo o della macchina virtuale, usare lemetriche di Monitoraggio di Azure e, se necessario, ridimensionare la macchina virtuale o il disco 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 di BLOB di pagine. Gli account di archiviazione senza questa funzionalità non devono essere usati per il BACKUP NELL’URL in SQL Server 2014 (12.x).