Applicazione dei backup di log delle transazioni (SQL Server)

Le informazioni contenute in questo argomento sono rilevanti solo per il modello di recupero con registrazione completa o il modello di recupero con registrazione minima delle operazioni bulk.

Questo argomento descrive l'applicazione dei backup del log delle transazioni come parte del ripristino di un database SQL Server.

Contenuto dell'argomento

Requisiti per ripristinare i backup dei log delle transazioni

Per applicare un backup del log delle transazioni devono essere soddisfatti i requisiti seguenti:

  • Numero sufficiente di backup del log per una sequenza di ripristino: per completare una sequenza di ripristino, è necessario che sia disponibile il backup di un numero sufficiente di record del log. I backup del log necessari, incluso il backup della parte finale del log se richiesto, devono essere disponibili prima dell'inizio della sequenza di ripristino.

  • Ordine di ripristino corretto: È necessario ripristinare prima il backup completo del database completo o il backup differenziale del database. Tutti i log delle transazioni creati dopo tale backup completo o differenziale devono essere ripristinati in ordine cronologico. Se uno dei backup del log delle transazioni appartenente a questa catena di log non è presente o risulta danneggiato, è possibile ripristinare soltanto i log delle transazioni antecedenti al log delle transazioni non più disponibile.

  • Database non ancora ripristinato: Impossibile ripristinare il database finché non viene applicato il log delle transazioni finale. Se si esegue il recupero del database dopo aver ripristinato uno dei backup del log delle transazioni intermedi, ovvero antecedenti all'estremità della catena di log, non sarà possibile eseguire il ripristino del database successivamente a tale punto senza riavviare l'intera sequenza di ripristino a partire dal backup completo del database.

    Suggerimento

    È consigliabile ripristinare tutti i backup del log (RESTORE LOG nome_database WITH NORECOVERY). Dopo aver ripristinato l'ultimo backup del log, recuperare il database in un'operazione separata (RESTORE DATABASE nome_database WITH RECOVERY).

Recupero e log delle transazioni

Quando si recupera il database al termine dell'operazione di ripristino, viene eseguito il rollback di tutte le transazioni incomplete. Questa procedura è nota come fase di rollback. L'esecuzione del rollback è necessaria per ripristinare 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.

Si supponga, ad esempio, che una serie di backup del log delle transazioni includa una transazione con esecuzione prolungata. L'inizio della transazione viene registrato nel primo backup del log delle transazioni, mentre la fine della transazione viene registrata nel secondo backup del log delle transazioni. Il primo backup del log delle transazioni non include un record di un'operazione di commit o rollback. Se viene eseguita un'operazione di recupero quando è applicato il primo backup del log delle transazioni, la transazione con esecuzione prolungata verrà considerata incompleta e verrà eseguito il rollback delle modifiche dei dati registrate nel primo backup del log delle transazioni. SQL Server non consente l'applicazione del secondo backup del log delle transazioni dopo questo punto.

Nota

In alcuni casi, durante il ripristino del log è possibile aggiungere un file in modo esplicito.

Utilizzo dei backup del log per eseguire il ripristino fino al momento dell'errore

Si osservi a titolo di esempio la sequenza di eventi seguente:

Tempo Event
8\.00 Backup del database per creare un backup completo del database.
12.00 Backup del log delle transazioni
16.00 Backup del log delle transazioni
18.00 Backup del database per creare un backup completo del database.
20.00 Backup del log delle transazioni
21.45 Si verifica un errore.

Nota

Per una spiegazione di questa sequenza di esempio di backup, vedere Backup del log delle transazioni (SQL Server).

Per ripristinare il database allo stato in cui si trovava alle 21.45, ovvero nell'istante in cui si è verificato l'errore, è possibile utilizzare una delle procedure alternative seguenti:

Alternativa 1: ripristinare il database da un backup completo più recente

  1. Creare un backup della parte finale del log delle transazioni attivo a partire dal momento dell'errore.

  2. Non ripristinare il backup completo del database delle 8.00. Ripristinare invece il backup completo del database più recente effettuato alle 18.00 e quindi applicare il backup del log effettuato alle 20.00 e il backup della parte finale del log.

Alternativa 2: ripristinare il database da un backup completo precedente

Nota

Questa procedura alternativa è utile nel caso non sia possibile utilizzare il backup completo del database effettuato alle 18.00 a causa di un problema. Questa procedura richiede più tempo di quello necessario per il ripristino del backup completo del database delle 18.00.

  1. Creare un backup della parte finale del log delle transazioni attivo a partire dal momento dell'errore.

  2. Ripristinare il backup completo del database delle 8.00 e quindi ripristinare in sequenza tutti e quattro i backup del log delle transazioni. Ciò determina il rollforward di tutte le transazioni completate fino alle 21.45.

    Questa procedura alternativa mostra quale sia il livello di sicurezza supplementare garantito dal mantenimento di una catena di backup del log delle transazioni eseguiti in una serie di backup completi del database.

Nota

In alcuni casi è anche possibile utilizzare i log delle transazioni per ripristinare un database fino a un punto nel tempo specifico. Per altre informazioni, ripristinare un database SQL Server in un punto in tempo (modello di ripristino completo).

Attività correlate

Per applicare un backup del log delle transazioni

Per eseguire il ripristino fino al punto di recupero

Per recuperare un database dopo il ripristino dei backup utilizzando WITH NORECOVERY

Vedere anche

Log delle transazioni (SQL Server)