Backup di snapshot di file per i file di database in Azure

Si applica a:SQL Server

Il backup con snapshot di file di SQL Server usa gli snapshot di Azure per offrire backup quasi istantanei e ripristini più veloci per i file di database archiviati usando Archiviazione BLOB di Azure. Questa funzionalità consente di semplificare i criteri di backup e ripristino. Per altre informazioni sull'archiviazione dei file di database con Archiviazione BLOB di Azure, vedere File di dati di SQL Server in Microsoft Azure.

Diagramma che illustra l'architettura di backup degli snapshot.

Se si ha già un account di Azure, Consultare SQL Server su macchine virtuali di Azure per attivare una macchina virtuale con SQL Server già installato.

Uso degli snapshot di Azure per eseguire il backup dei file di database archiviati in Azure

Che cos'è un backup con snapshot dei file di SQL Server

Un backup con snapshot di file è costituito da un insieme di snapshot di Azure dei BLOB che contengono i file del database, oltre che da un file di backup contenente riferimenti a queste snapshot di file. Ogni snapshot del file viene memorizzato nel contenitore con il blob di base. È possibile specificare che il file di backup stesso venga scritto su URL, disco o nastro. È consigliabile eseguire il backup su URL. Per altre informazioni sul backup, vedere BACKUP e sull'esecuzione del backup nell'URL, vedere SQL Server Backup nell'URL.

Diagramma dell'architettura della funzionalità degli snapshot.

L'eliminazione del BLOB di base invaliderà il set di backup e non è possibile eliminare un BLOB che contiene snapshot di file, a meno che non si scelga espressamente di eliminare un BLOB con tutti i relativi snapshot di file. Inoltre, l'eliminazione di un database o di un file di dati non elimina il BLOB di base o uno qualsiasi dei relativi snapshot di file Inoltre, l'eliminazione del file di backup non comporta l'eliminazione di nessuna delle istantanee dei file contenute nel set di backup. Per eliminare un set di backup file-snapshot, usare la stored procedure di sistema sys.sp_delete_backup.

Backup di database completo: l'esecuzione di un backup di database completo usando il backup di snapshot di file crea uno snapshot di Azure di ogni file di dati e di log che costituisce il database, stabilisce la catena di backup del log delle transazioni e scrive la posizione degli snapshot di file nel file di backup.

Backup del log delle transazioni: L'esecuzione di un backup del log delle transazioni con snapshot di file crea uno snapshot di file di ciascun file di database (non solo del log delle transazioni), registra nel file di backup le informazioni sul percorso dello snapshot di file e tronca il file di log delle transazioni.

Importante

Dopo il backup completo iniziale che è necessario per stabilire la catena dei backup del log delle transazioni (che può essere un backup di snapshot di file), è sufficiente eseguire i backup del log delle transazioni perché ogni set di backup di snapshot di file del log delle transazioni contiene snapshot di file di tutti i file di database e può essere usato per eseguire un ripristino del database o un ripristino del log. Dopo il backup del database completo iniziale, non sono necessari altri backup completi o differenziali perché Archiviazione BLOB di Azure gestisce le differenze tra ogni snapshot di file e lo stato corrente del BLOB di base per ogni file di database.

Nota

Per un'esercitazione sull'uso di SQL Server con Archiviazione BLOB di Microsoft Azure, vedere Tutorial: Using the Microsoft Azure Blob storage service with SQL Server databases(Esercitazione: Uso di Archiviazione BLOB di Microsoft Azure con i database di SQL Server)

Ripristinare tramite backup di snapshot dei file

Poiché ciascun set di backup con snapshot dei file contiene uno snapshot di ciascun file di database, per il ripristino sono necessari al massimo due set di backup con snapshot dei file consecutivi. Questo vale indipendentemente dal fatto che il set di backup provenga da un backup di database completo o da un backup del log. Si tratta di un processo molto diverso rispetto al ripristino eseguito con i file di backup di flusso tradizionale. Con il backup di flusso tradizionale il processo di ripristino richiede l'uso di un'intera catena dei set di backup: il backup completo, un backup differenziale e uno o più backup del log delle transazioni. La fase di recupero del processo di ripristino rimane la stessa indipendentemente dal fatto che il ripristino utilizzi un backup basato su snapshot di file o un set di backup in streaming.

Al momento di un qualsiasi set di backup: Per eseguire un'operazione RESTOREDATABASE per ripristinare un database al momento di uno specifico set di backup con snapshot di file, sono necessari solo lo specifico set di backup e i BLOB di base. Poiché è possibile usare un set di backup di snapshot di file di log delle transazioni per eseguire un'operazione RESTOREDATABASE , in genere si userà un set di backup del log delle transazioni per eseguire questo tipo di operazione e raramente si usa un set di backup completo del RESTOREDATABASE database. Alla fine di questo articolo viene fornito un esempio che illustra questa tecnica.

A un momento compreso tra due set di backup snapshot dei file: Per eseguire un'operazione RESTOREDATABASE per ripristinare un database a uno specifico momento compreso tra gli orari di due set adiacenti di backup del log delle transazioni, sono necessari solo due set di backup del log delle transazioni (uno prima e uno dopo il momento al quale si desidera ripristinare il database). A tale scopo, è necessario eseguire un'operazione RESTOREDATABASE WITH NORECOVERY usando il set di backup snapshot del file di log delle transazioni relativo al momento precedente ed eseguire un'operazione RESTORE LOG WITH RECOVERY usando il set di backup snapshot del file di log delle transazioni relativo al momento successivo e l'argomento STOPAT per specificare il momento temporale in cui interrompere il ripristino dal backup del log delle transazioni. Alla fine di questo articolo viene fornito un esempio che illustra questa tecnica.

Manutenzione del set di backup dei file

Eliminazione di un set di backup di snapshot di file: non è possibile sovrascrivere un set di backup di snapshot di file usando l'argomento FORMAT. L'argomento FORMAT non è consentito per evitare di lasciare orfani snapshot di file che erano stati creati con il backup di snapshot di file originale. Per eliminare un set di backup file-snapshot, usare la stored procedure di sistema sys.sp_delete_backup. Questa procedura archiviata elimina il file di backup e le snapshot di file che costituiscono il set di backup. L'utilizzo di un altro metodo per eliminare un set di backup con snapshot di file può comportare l'eliminazione del file di backup senza eliminare le snapshot dei file nel set di backup.

Eliminazione di snapshot di file di backup orfani: Potrebbero essere presenti snapshot di file orfani se il file di backup è stato eliminato senza usare la stored procedure di sistema sys.sp_delete_backup oppure se un database o un file di database è stato eliminato mentre i BLOB contenenti il database o il file di database avevano associati snapshot di file di backup. Per identificare gli snapshot di file che potrebbero essere orfani, utilizzare la funzione di sistema sys.fn_db_backup_file_snapshots per elencare tutti gli snapshot di file dei file di database. Per identificare le istantanee dei file che fanno parte di uno specifico set di backup di istantanee dei file, utilizzare la procedura di sistema archiviata RESTORE FILELISTONLY. È quindi possibile usare la stored procedure di sistema sys.sp_delete_backup_file_snapshot per eliminare un singolo snapshot di file di backup rimasto orfano. Alla fine di questo articolo vengono forniti esempi di uso di questa funzione di sistema e di queste stored procedure di sistema. Per altre informazioni, vedere sp_delete_backup, sys.fn_db_backup_file_snapshots, sp_delete_backup_file_snapshot e RESTORE FILELISTONLY.

Considerazioni e limitazioni

Archiviazione Premium: quando si usa l'archiviazione Premium, si applicano le limitazioni seguenti:

Singolo account di archiviazione: Il file snapshot e i blob di destinazione devono usare lo stesso account di archiviazione.

Modello di recupero bulk-logged: quando si utilizza il modello di recupero bulk-logged e un backup del log delle transazioni contenente transazioni con registrazione minima, non è possibile eseguire un ripristino del log delle transazioni, incluso un ripristino temporizzato, usando il backup del log delle transazioni. Piuttosto, si esegue un ripristino del database al momento del set di backup con snapshot di file. Questa limitazione è identica a quella del backup in streaming.

Ripristino in linea: quando si usano i backup di snapshot di file non è possibile eseguire un ripristino in linea. Per altre informazioni sul ripristino in linea, vedere Ripristino in linea (SQL Server).

Fatturazione: quando si usa il backup di snapshot di file di SQL Server, le modifiche dei dati saranno soggette a costi aggiuntivi. Per ulteriori informazioni, consulta Comprendere come gli snapshot comportano addebiti.

Archiviazione: Se si desidera archiviare un backup snapshot di file, è possibile archiviarlo nell'archiviazione BLOB o nel backup in streaming. Per archiviare nell'archivio BLOB, copiare gli snapshot nel set di backup di snapshot di file in BLOB separati. Per archiviare in un backup in streaming, ripristinare il backup snapshot dei file come nuovo database, quindi eseguire un normale backup in streaming con compressione e/o crittografia e archiviarlo per tutto il tempo desiderato, indipendentemente dai BLOB di base.

Importante

Il mantenimento di più backup snapshot di file implica solo un lieve sovraccarico in termini di prestazioni. La gestione di un numero eccessivo di backup di snapshot di file, invece, può avere un impatto sulle prestazioni di I/O del database. È consigliabile gestire solo i backup di snapshot di file necessari per supportare l'obiettivo del punto di recupero.

Eseguire il backup del database e del registro usando un backup file-snapshot

Questo esempio utilizza il backup con snapshot di file per eseguire il backup del database di esempio AdventureWorks2025 in un URL.

-- To permit log backups, before the full database backup, modify the database   
-- to use the full recovery model.  
USE master;  
GO  
ALTER DATABASE AdventureWorks2022  
   SET RECOVERY FULL;  
GO  
-- Back up the full AdventureWorks2022 database.  
BACKUP DATABASE AdventureWorks2022   
TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2022.bak'   
WITH FILE_SNAPSHOT;  
GO  
-- Back up the AdventureWorks2022 log using a time stamp in the backup file name.  
DECLARE @Log_Filename AS VARCHAR (300);  
SET @Log_Filename = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2022_Log_'+   
REPLACE (REPLACE (REPLACE (CONVERT (VARCHAR (40), GETDATE (), 120), '-','_'),':', '_'),' ', '_') + '.trn';  
BACKUP LOG AdventureWorks2022  
 TO URL = @Log_Filename WITH FILE_SNAPSHOT;  
GO  

Eseguire il ripristino da un backup di snapshot di file SQL Server

L'esempio eseguente mostra come eseguire il ripristino del database AdventureWorks2025 usando un set di backup di snapshot di file del log delle transazioni e illustra un'operazione di recupero. Si noti che è possibile ripristinare un database da un singolo set di backup snapshot di file del log delle transazioni.

RESTORE DATABASE AdventureWorks2022 FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2022_2015_05_18_16_00_00.trn'   
WITH RECOVERY, REPLACE;  
GO  

Eseguire il ripristino da un backup di snapshot di file SQL Server in un punto specifico del tempo

L'esempio seguente ripristina AdventureWorks2025 allo stato in cui si trovava in un momento specifico, usando due set di backup snapshot di file del log delle transazioni, e mostra anche un'operazione di recupero.

RESTORE DATABASE AdventureWorks2022 FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2022_2015_05_18_16_00_00.trn'   
WITH NORECOVERY,REPLACE;  
GO   
  
RESTORE LOG AdventureWorks2022 FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2022_2015_05_18_18_00_00.trn'   
WITH RECOVERY,STOPAT = 'May 18, 2015 5:35 PM';  
GO  

Eliminare un set di backup file-snapshot del database

Per eliminare un set di backup file-snapshot, usare la stored procedure di sistema sys.sp_delete_backup. Specificare il nome del database in modo che il sistema verifichi che il set di backup di snapshot di file specificato sia effettivamente un backup per il database specificato. Se non si specifica alcun nome di database, il set di backup specificato con i relativi snapshot di file verrà eliminato senza tale convalida. Per altre informazioni, vedere sp_delete_backup.

Avviso

Se si prova a eliminare un set di backup di snapshot di file usando un altro metodo, ad esempio il portale di gestione di Microsoft Azure o il visualizzatore di archiviazione di Azure in SQL Server Management Studio, gli snapshot di file nel set di backup non verranno eliminati. Questi strumenti elimineranno solo il file di backup stesso che contiene i riferimenti agli snapshot dei file nel set di backup degli snapshot dei file. Per identificare gli snapshot di file di backup che rimangono dopo che un file di backup è stato eliminato in modo improprio, utilizzare la funzione di sistema sys.fn_db_backup_file_snapshots e quindi la stored procedure di sistema sys.sp_delete_backup_file_snapshot per eliminare un singolo snapshot di file di backup.

L'esempio seguente mostra come eliminare il set di backup di snapshot di file specificato, inclusi i file di backup e gli snapshot di file che costituiscono il set di backup specificato.

EXEC sys.sp_delete_backup 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2022.bak', 'AdventureWorks2022' ;  
GO  

Visualizzare gli snapshot di file di backup del database

Per visualizzare gli snapshot dei file del BLOB di base per ciascun file di database, utilizzare la funzione di sistema sys.fn_db_backup_file_snapshots. Questa funzione di sistema consente di visualizzare tutti gli snapshot dei file di backup di ogni BLOB di base per un database archiviato in Archiviazione BLOB di Azure. Uno dei casi d'uso principali di questa funzione consiste nell'identificare i file-snapshot di backup di un database che rimangono quando il file di backup di un set di backup file-snapshot viene eliminato mediante un meccanismo diverso dalla stored procedure di sistema sys.sp_delete_backup. Per determinare gli snapshot di file di backup che fanno parte di set di backup integri e quelli che non fanno parte di set di backup integri, usare la stored procedure di sistema RESTORE FILELISTONLY per elencare gli snapshot di file appartenenti a ciascun file di backup. Per altre informazioni, vedere sys.fn_db_backup_file_snapshots e RESTORE FILELISTONLY.

L'esempio seguente restituisce l'elenco di tutti gli snapshot di file di backup per il database specificato.

--Either specify the database name or set the database context  
USE AdventureWorks2022  
select * from sys.fn_db_backup_file_snapshots (null) ;  
GO  
select * from sys.fn_db_backup_file_snapshots ('AdventureWorks2022') ;  
GO  

Eliminare lo snapshot di un singolo file di backup del database

Per eliminare un singolo snapshot del file di backup di un BLOB di base del database, usare la stored procedure di sistema sys.sp_delete_backup_file_snapshot. Uno dei principali casi d'uso di questa stored procedure di sistema è eliminare i file snapshot orfani che restano dopo l'eliminazione di un file di backup con un metodo diverso dalla stored procedure di sistema sys.sp_delete_backup. Per altre informazioni, vedere sp_delete_backup_file_snapshot.

Avviso

L'eliminazione di un singolo snapshot di file che fa parte di un set di backup di snapshot di file invalida il set di backup.

L'esempio seguente mostra come eliminare lo snapshot di file di backup specificato. L'URL per il backup specificato viene ottenuto usando la funzione di sistema sys.fn_db_backup_file_snapshots.

EXEC sys.sp_delete_backup_file_snapshot N'AdventureWorks2022', N'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2022Data.mdf?snapshot=2015-05-29T21:31:31.6502195Z';  
GO  

Passaggi successivi