Panoramica del ripristino e del recupero (SQL Server)

Si applica a: SQL Server

Questo articolo offre informazioni generali sul processo di ripristino e recupero del database per SQL Server.

Panoramica

Per recuperare un database di SQL Server in seguito a un errore, il relativo amministratore deve ripristinare un set di backup di SQL Server in una sequenza di ripristino significativa e logicamente corretta. SQL Server supporta il ripristino di dati da backup di un intero database, di un file di dati o di una pagina di dati nelle modalità descritte di seguito:

  • Database ( ripristino di database completo)

    L'intero database viene ripristinato e recuperato e il database resta offline durante le operazioni di ripristino e di recupero.

  • File di dati ( ripristino del file)

    Un file di dati o un set di file viene ripristinato e recuperato. Durante un ripristino del file, i filegroup che includono i file vengono impostati automaticamente come offline durante il ripristino. Qualsiasi tentativo di accedere a un filegroup offline provoca un errore.

  • Pagina di dati ( ripristino di pagina)

    Nel modello di recupero con registrazione completa o con registrazione minima delle operazioni bulk è possibile ripristinare singole pagine. Le operazioni di ripristino della pagina possono essere effettuate in qualsiasi database, indipendentemente dal numero di filegroup.

Il backup e il ripristino di SQL Server possono essere usati in tutti i sistemi operativi supportati. Per informazioni sui sistemi operativi supportati, vedere Requisiti hardware e software per l'installazione di SQL Server. Per informazioni sul supporto dei backup di versioni precedenti di SQL Server, vedere la sezione "Supporto della compatibilità" di RESTORE.

Scenari di ripristino

Uno scenario di ripristino in SQL Server è il processo di ripristino dei dati da uno o più backup, seguito dal recupero del database. Gli scenari di ripristino supportati dipendono dal modello di recupero del database e dall'edizione di SQL Server.

Nella tabella seguente vengono descritti i possibili scenari di ripristino supportati per modelli di recupero diversi.

scenario di ripristino Nel modello di recupero con registrazione minima Nel modello di recupero con registrazione completa o con registrazione minima delle operazioni bulk
ripristino di database completo Si tratta della strategia di ripristino standard. Un ripristino di database completo può comportare semplicemente il ripristino e il recupero di un backup completo del database. In alternativa, tale tipo di ripristino può comportare il ripristino di un backup completo del database seguito dal ripristino e dal recupero di un backup differenziale.

Per altre informazioni, vedere Ripristini di database completi (modello di recupero con registrazione minima).
Si tratta della strategia di ripristino standard. Un ripristino di database completo comporta il ripristino di un backup completo del database e, facoltativamente, di un backup differenziale, se disponibile, seguito dal ripristino di tutti i successivi backup del log, in sequenza. Il ripristino di database completo viene completato tramite il recupero dell'ultimo backup del log e il suo ripristino (RESTORE WITH RECOVERY).
Per altre informazioni, vedere Ripristini di database completi (modello di recupero con registrazione completa)
Ripristino di file 1 Consente di ripristinare uno o più file di sola lettura danneggiati senza ripristinare l'intero database. È disponibile solo se il database contiene almeno un filegroup di sola lettura. Consente di ripristinare uno o più file, senza ripristinare l'intero database. Può essere eseguito mentre il database è offline oppure, per alcune edizioni di SQL Server, mentre il database rimane online. Durante un'operazione di ripristino del file, i filegroup che includono i file che vengono ripristinati sono sempre offline.
Ripristino di pagine Non applicabile Consente di ripristinare una o più pagine danneggiate. Può essere eseguito mentre il database è offline oppure, per alcune edizioni di SQL Server, mentre il database rimane online. Durante un'operazione di ripristino della pagina, le pagine che vengono ripristinate sono sempre offline.

Perché la pagina sia aggiornata rispetto al file di log corrente, è necessario che sia disponibile una catena non interrotta di backup del log, fino al file di log corrente, e che i backup vengano tutti applicati.
Per altre informazioni, vedere Ripristinare pagine (SQL Server).
Ripristino a fasi 1 Consente di ripristinare e recuperare il database in varie fasi a livello di filegroup, partendo dal filegroup primario e da tutti i filegroup secondari di lettura/scrittura. Consente di ripristinare e recuperare il database in varie fasi a livello di filegroup, partendo dal filegroup primario.

Per altre informazioni, vedere Ripristini a fasi (SQL Server)

1 Il ripristino online è supportato solo nell'edizione Enterprise.

Passaggi per ripristinare un database

Per ripristinare un file, il motore di database esegue due passaggi:

  • Crea eventuali file di database mancanti.

  • Copia i dati dai dispositivi di backup nei file di database.

Per ripristinare un database, il motore di database esegue tre passaggi:

  • Crea i file di database e i file del log delle transazioni se non esistono già.

  • Copia tutti i dati, il log e le pagine di indice dai supporti di backup di un database nei file del database.

  • Applica il log delle transazioni, in ciò che viene detto processo di recupero.

Indipendentemente dalla modalità di ripristino dei dati, prima di poter recuperare un database, il motore di database di SQL Server verifica che l'intero database sia logicamente consistente. Se, ad esempio, si ripristina un file, non è possibile recuperarlo e attivare la modalità online finché non è stato eseguito un rollforward sufficiente a garantirne la coerenza con il database.

Vantaggi del ripristino di un file o di una pagina

Il ripristino e il recupero di file o pagine, anziché dell'intero database, offrono i vantaggi seguenti:

  • Il ripristino di una quantità minore di dati consente di ridurre il tempo necessario per la copia e il recupero.

  • Se in SQL Server si esegue un'operazione di ripristino del file o della pagina, è possibile mantenere online altri dati del database durante l'operazione di ripristino.

Ripristino e log delle transazioni

Per la maggior parte degli scenari di ripristino, è necessario applicare un backup del log delle transazioni e consentire al motore di database di SQL Server di eseguire il processo di recupero affinché il database sia disponibile online. Il recupero è il processo che SQL Server usa per avviare ogni database in uno stato coerente a livello di transazione o in uno stato originario.

Se si verifica un failover o un arresto anomalo, è possibile che il database sia in un stato in cui alcune modifiche ai database non siano state scritte dalla cache del buffer ai file di dati e che transazioni incomplete abbiano apportato modifiche al file di dati. Quando viene avviata un'istanza di SQL Server, viene eseguito un recupero di ogni database che comprende tre fasi, sulla base dell'ultimo checkpoint del database:

  • La fase 1 è la fase di analisi durante la quali si analizza il log delle transazioni per determinare l'ultimo checkpoint e si crea la tabella delle pagine dirty e la tabella delle transazioni attive. La tabella delle pagine dirty contiene record di pagine dirty nel momento in cui il database è stato arrestato. La tabella delle transazioni attive contiene record di transazioni attive nel momento in cui il database è stato arrestato in modo non corretto.

  • La fase 2 è la fase di rollforward durante la quale si esegue il rollforward di tutte le modifiche registrate nel log che potrebbero non essere state scritte nei file di dati nel momento in cui il database è stato arrestato. Il numero di sequenza del file di log (LSN) (minLSN) necessario per un recupero corretto a livello di database si trova nella tabella delle pagine dirty e contrassegna l'inizio delle operazioni di rollforward necessarie in tutte le pagine dirty. In questa fase il motore di database di SQL Server scrive su disco tutte le pagine dirty appartenenti alle transazioni di cui è stato eseguito il commit.

  • La fase 3 è la fase di rollback durante la quale si esegue il rollback di tutte le transazioni incomplete rilevate nella tabella delle transazioni attive per assicurare l'integrità del database. Dopo il rollback il database passa nello stato online, dopodiché non è possibile applicare alcun altro backup del log delle transazioni al database.

Le informazioni sullo stato di avanzamento di ogni fase di recupero del database vengono registrate nel log degli errori di SQL Server. È anche possibile rilevare lo stato di avanzamento del recupero del database usando gli eventi estesi. Per altre informazioni, vedere il post di blog New extended events for database recovery progress (Nuovi eventi estesi per lo stato di avanzamento del recupero del database).

Nota

In uno scenario di ripristino a fasi, se un filegroup di sola lettura è stato tale fin da prima della creazione del backup del file, l'applicazione dei backup del log al filegroup non è necessaria e non viene eseguita dal ripristino del file.

Nota

Per ottimizzare la disponibilità dei database in un ambiente Enterprise dopo l'avvio del servizio SQL Server, ad esempio dopo il failover di un'istanza del cluster di failover Always On o il riavvio sul posto, SQL Server Enterprise Edition può portare online un database dopo la fase di rollforward, mentre la fase di rollback è ancora in esecuzione. Questo processo è noto come recupero rapido. Tuttavia, il recupero rapido non è disponibile quando il database passa a uno stato online, ma il servizio SQL Server non è stato riavviato. Ad esempio, l'esecuzione di ALTER DATABASE AdventureWorks SET ONLINE; non consentirà al database di essere in stato di lettura/scrittura fino al completamento di tutte e tre le fasi di recupero.

Modelli di recupero e operazioni di ripristino supportate

Le operazioni di ripristino disponibili per un database variano in base al relativo modello di recupero. Nella tabella seguente vengono riepilogati i casi e la misura in cui ognuno dei modelli di recupero supporta uno scenario di ripristino specifico.

Operazione di ripristino Modello di recupero con registrazione completa Modello di recupero con registrazione minima delle operazioni bulk Modello di recupero con registrazione minima
Recupero dati Recupero completo (se il log è disponibile). Rischio parziale di perdita di dati. Tutti i dati successivi all'ultimo backup completo o differenziale vanno perduti.
Ripristino temporizzato Qualsiasi periodo di tempo coperto dai backup del log. Non consentito se il backup del log contiene modifiche con registrazione minima delle operazioni bulk. Non supportato.
Ripristino di file 1 Supporto completo. In casi specifici. 2 Disponibile solo per i file secondari di sola lettura.
Ripristino della pagina 1 Supporto completo. In casi specifici. 2 Nessuno.
Ripristino a fasi (a livello di filegroup) 1 Supporto completo. In casi specifici. 2 Disponibile solo per i file secondari di sola lettura.

1 Disponibile solo nell'edizione Enterprise di SQL Server

2 Per le condizioni necessarie, vedere la sezione relativa alle Restrizioni relative al ripristino in base al modello di recupero con registrazione minima più avanti in questo articolo.

Importante

Indipendentemente dal modello di recupero di un database, un backup di SQL Server non può essere ripristinato da una versione del motore di database di SQL Server precedente a quella usata per creare il backup.

Scenari di ripristino nel modello di recupero con registrazione minima

Il modello di recupero con registrazione minima impone le restrizioni seguenti sulle operazioni di ripristino:

Se una o più di queste restrizioni non sono appropriate per le proprie esigenze di recupero, valutare se utilizzare il modello di recupero con registrazione completa. Per altre informazioni, vedere Panoramica del backup (SQL Server).

Importante

Indipendentemente dal modello di recupero di un database, un backup di SQL Server non può essere ripristinato da una versione di SQL Server precedente a quella tramite cui è stato creato il backup.

Ripristino nel modello di recupero con registrazione minima delle operazioni bulk

In questa sezione vengono fornite informazioni sul ripristino proprie del modello di recupero con registrazione minima delle operazioni bulk da intendersi esclusivamente come integrazione del modello di recupero con registrazione completa.

Nota

Per informazioni generali sul modello di recupero con registrazione minima delle operazioni bulk, vedere Log delle transazioni (SQL Server).

In linea generale, il modello di recupero con registrazione minima delle operazioni bulk è simile al modello di recupero con registrazione completa e le informazioni fornite per quest'ultimo si applicano a entrambi. Tuttavia, il recupero temporizzato e il ripristino in linea sono influenzati dal modello di recupero con registrazione minima delle operazioni bulk.

Restrizioni relative al recupero temporizzato

Se un backup del log eseguito utilizzando il modello di recupero con registrazione minima delle operazioni bulk contiene modifiche con registrazione minima delle operazioni bulk, il recupero temporizzato non è consentito. Se si tenta di eseguire il recupero temporizzato in un backup del log che contiene modifiche con registrazione minima delle operazioni bulk, l'operazione di ripristino non verrà eseguita correttamente.

Restrizioni relative al ripristino online

Una sequenza di ripristino in linea funziona solo se vengono soddisfatte le condizioni seguenti:

  • Tutti i backup del log necessari devono essere eseguiti prima dell'avvio della sequenza di ripristino.

  • È necessario eseguire un backup delle modifiche bulk prima di avviare la sequenza del ripristino online.

  • Se nel database sono presenti modifiche bulk, tutti i file devono essere online o inattivi. Questo significa che non è più parte del database.

Se queste condizioni non vengono soddisfatte, la sequenza del ripristino in linea non riesce.

Nota

È consigliabile passare al modello di recupero con registrazione completa prima di avviare un ripristino online. Per altre informazioni, vedere Modelli di recupero (SQL Server).

Per informazioni su come eseguire un ripristino online, vedere Ripristino in linea (SQL Server).

Database Recovery Advisor (SQL Server Management Studio)

Tramite Database Recovery Advisor viene semplificata la costruzione di piani di ripristino mediante i quali vengono implementate ottime sequenze di ripristino corrette. Molti problemi noti di ripristino del database sono stati risolti e sono stati apportati molti miglioramenti richiesti dai clienti. Di seguito sono riportati i miglioramenti principali introdotti da Database Recovery Advisor:

  • Algoritmo del piano di ripristino: l'algoritmo utilizzato per costruire i piani di ripristino è stato migliorato in modo significativo, in particolare per gli scenari di ripristino complessi. Molti casi limite, inclusi gli scenari di fork nei ripristini temporizzati, vengono gestititi in modo più efficiente rispetto alle versioni precedenti di SQL Server.

  • Ripristini temporizzati: tramite Database Recovery Advisor viene notevolmente semplificato il ripristino di un database in un determinato momento. Tramite una cronologia di backup visiva viene migliorato in modo significativo il supporto per i ripristini temporizzati. Tramite questa cronologia visiva è possibile identificare un momento appropriato come punto di recupero di destinazione per il ripristino di un database. Tramite la cronologia viene semplificato l'attraversamento di un percorso di recupero con fork, cioè un percorso che si estende su più fork di recupero. In un piano di ripristino temporizzato specificato sono inclusi automaticamente i backup rilevanti per il ripristino al punto nel tempo previsto (data e ora). Per altre informazioni, vedere Ripristino di un database di SQL Server fino a un punto specifico all'interno di un backup (modello di recupero con registrazione completa).

Per ulteriori informazioni su Database Recovery Advisor, vedere i seguenti blog relativi alla facilità di gestione di SQL Server:

Ripristino accelerato del database

Il ripristino accelerato del database è disponibile a partire da SQL Server 2019 (15.x) e da database SQL di Azure. Il ripristino accelerato del database consente di migliorare considerevolmente la disponibilità del database, in particolare in presenza di transazioni a esecuzione prolungata, riprogettando il processo di ripristino del motore di database di SQL Server. Un database in cui è abilitato il ripristino accelerato del database completa il processo di recupero in modo considerevolmente più veloce dopo un failover o una chiusura anomala. Se abilitato, il ripristino accelerato del database completa anche il rollback delle transazioni con esecuzione prolungata annullate in modo significativamente più veloce.

È possibile abilitare il ripristino accelerato del database per ogni database in SQL Server 2019 (15.x) usando la sintassi seguente:

ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = ON;

Nota

Il ripristino accelerato del database è abilitato per impostazione predefinita nel database SQL di Azure.