Ripristini di database completi (modello di recupero con registrazione completa)

Si applica a: SQL Server

L'obiettivo di un ripristino completo del database è il ripristino dell'intero database. L'intero database è offline per la tutta la durata del ripristino. Prima che sia possibile portare online una o più parti del database, tutti i dati vengono recuperati fino a un punto coerente in cui tutte le parti del database sono aggiornate allo stesso punto nel tempo e non sono presenti transazioni di cui non è stato eseguito il commit.

Dopo aver ripristinato uno o più backup dei dati, è necessario ripristinare tutti i backup del log delle transazioni successivi nel modello di recupero con registrazione completa, quindi recuperare il database. È possibile ripristinare un database in un punto di recupero specifico all'interno di uno di questi backup del log. Tale punto di recupero può corrispondere a una data e un'ora specifiche, a una transazione contrassegnata o a un numero di sequenza del file di log (LSN).

Durante il ripristino di un database, in particolare nel modello di recupero con registrazione completa o in quello con registrazione minima delle operazioni bulk, si consiglia di utilizzare una sola sequenza di ripristino. Una sequenza di ripristino è costituita da una o più operazioni di ripristino che gestiscono lo spostamento dei dati attraverso una o più fasi del ripristino.

Origini non attendibili

È consigliabile evitare di collegare o ripristinare database provenienti da origini sconosciute o non attendibili. Questi database possono contenere codice dannoso che potrebbe eseguire codice Transact-SQL indesiderato o causare errori modificando lo schema o la struttura fisica del database. Prima di usare un database da un'origine ignota o non attendibile, eseguire DBCC CHECKDB sul database in un server non di produzione. Inoltre esaminare il codice scritto dall'utente nel database, ad esempio stored procedure o altro codice definito dall'utente.

Backup da versioni precedenti

Per informazioni sul supporto dei backup di versioni precedenti di SQL Server, vedere la sezione "Supporto della compatibilità" di RESTORE (Transact-SQL).

Ripristino di un database fino al momento dell'errore

Il recupero dello stato di un database fino al momento dell'errore in genere include i passaggi seguenti:

  1. Eseguire il backup del log delle transazioni attive (noto anche come parte finale del log). In questo modo viene creato un backup della parte finale del log. Se il log delle transazioni attivo non è disponibile, tutte le transazioni in quella parte del log vengono perdute.

    Importante

    Nel modello di recupero con registrazione minima delle operazioni bulk, per eseguire il backup di un log che contiene operazioni bulk registrate è necessario disporre dell'accesso a tutti i file di dati del database. Se i file di dati non sono accessibili, non è possibile eseguire il backup del log delle transazioni. In questo caso, è necessario ripetere manualmente tutte le modifiche apportate a partire dall'ultimo backup del log.

    Per altre informazioni, vedere Backup della parte finale del log (SQL Server).

  2. Ripristinare il backup completo del database più recente senza recuperare il database (RESTORE DATABASE _database FROM _backup WITH NORECOVERY).

  3. Se sono presenti backup differenziali, ripristinare il più recente senza recuperare il database (RESTORE DATABASE nome_database FROM dispositivo_backup_differenziale WITH NORECOVERY).

    In questo modo viene ridotto il numero di backup del log da ripristinare.

  4. Ripristinare i log in sequenza con NORECOVERY a partire dal primo backup del log delle transazioni creato dopo il backup appena ripristinato.

  5. Recuperare il database (RESTORE DATABASE nome_database WITH RECOVERY). In alternativa, è possibile eseguire questo passaggio insieme al ripristino dell'ultimo backup del log.

Nella figura seguente è illustrata tale sequenza di ripristino. Dopo il verificarsi di un errore (1) viene creato un backup della parte finale del log (2). Successivamente, il database viene ripristinato fino al momento dell'errore. L'operazione comporta il ripristino di un backup del database, di un successivo backup differenziale e di tutti i backup del log eseguiti dopo il backup differenziale, incluso il backup della parte finale del log.

Ripristino di database completo fino al momento in cui si è verificato un errore

Nota

Se si ripristina un backup del database in un'istanza del server diversa, vedere Copiare database tramite backup e ripristino.

Sintassi Transact-SQL di base per RESTORE

La sintassi di base Transact-SQL RESTORE per la sequenza di ripristino nell'illustrazione precedente è la seguente:

  1. RESTORE DATABASE database FROM full database backup WITH NORECOVERY;

  2. RESTORE DATABASE database FROM backup_differenziale_completo WITH NORECOVERY;

  3. RESTORE LOG database FROM backup_log WITH NORECOVERY;

    Ripetere questo passaggio di ripristino del log per ogni ulteriore backup del log.

  4. RESTORE DATABASE database WITH RECOVERY;

Esempio: ripristino fino al momento dell'errore (Transact-SQL)

Nell'esempio Transact-SQL seguente vengono illustrate le opzioni fondamentali di una sequenza di ripristino del database fino al momento dell'errore. Nell'esempio viene creato un backup della parte finale del log del database. Vengono quindi ripristinati un backup completo del database e un backup del log, quindi il backup della parte finale del log. Il database viene infine recuperato in un passaggio finale separato.

Nota

Questo esempio u un backup del database e un backup del log creati nella sezione "Backup del database nel modello di recupero con registrazione completa" di Backup completo del database (SQL Server). Il database di esempio AdventureWorks2022 è stato impostato per l'utilizzo del modello di recupero con registrazione completa prima del backup del database.

USE master;  
--Create tail-log backup.  
BACKUP LOG AdventureWorks2022   
TO DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'    
   WITH NORECOVERY;   
GO  
--Restore the full database backup (from backup set 1).  
RESTORE DATABASE AdventureWorks2022   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'   
  WITH FILE=1,   
    NORECOVERY;  
  
--Restore the regular log backup (from backup set 2).  
RESTORE LOG AdventureWorks2022   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'   
  WITH FILE=2,   
    NORECOVERY;  
  
--Restore the tail-log backup (from backup set 3).  
RESTORE LOG AdventureWorks2022   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'  
  WITH FILE=3,   
    NORECOVERY;  
GO  
--recover the database:  
RESTORE DATABASE AdventureWorks2022 WITH RECOVERY;  
GO  

Ripristino di un database fino a un punto all'interno di un backup del log

Nel modello di recupero con registrazione completa, un ripristino del database completo può essere generalmente recuperato in un punto nel tempo, in una transazione contrassegnata o in un LSN all'interno di un backup del log. Quando si utilizza il modello di recupero con registrazione minima delle operazioni bulk, se il backup del log contiene modifiche con registrazione minima delle operazioni bulk, il recupero temporizzato non è tuttavia possibile.

Scenari di ripristino temporizzato di esempio

Nell'esempio seguente viene illustrato un sistema di database di importanza critica per le strategie aziendali per il quale è necessaria la creazione di un backup completo del database ogni notte a mezzanotte, di un backup differenziale del database ogni ora da lunedì a sabato e di backup del log delle transazioni ogni 10 minuti per tutto il giorno. Per ripristinare lo stato in cui si trovava il database alle 05:19 di mercoledì, procedere come segue:

  1. Ripristinare il backup completo del database creato martedì a mezzanotte.

  2. Ripristinare il backup differenziale del database creato alle 5:00 di mercoledì.

  3. Applicare il backup del log delle transazioni creato alle 5:10 di mercoledì.

  4. Applicare il backup del log delle transazioni creato alle 5:20 di mercoledì, specificando che il processo di recupero si applica solo alle transazioni avvenute prima delle 05:19.

In alternativa, se il database deve essere ripristinato allo stato in cui si trovava alle 3:04 di giovedì, ma il backup differenziale del database creato alle 3:00 di giovedì non è disponibile, eseguire le operazioni seguenti:

  1. Ripristinare il backup del database creato mercoledì a mezzanotte.

  2. Ripristinare il backup differenziale del database creato alle 02:00 di giovedì.

  3. Applicare tutti i backup del log delle transazioni creati dalle 02:10 alle 3:00 di giovedì.

  4. Applicare il backup del log delle transazioni creato alle 3:10 di giovedì, interrompendo il processo di ripristino alle 3:04.

Attività correlate

Per ripristinare un backup completo del database

Per ripristinare un backup differenziale del database

Per ripristinare un backup del log delle transazioni

Per ripristinare un backup utilizzando SMO (SQL Server Management Objects)

Per ripristinare un database fino a un punto all'interno di un backup del log

Vedi anche

RESTORE (Transact-SQL)
BACKUP (Transact-SQL)
Applicare backup di log delle transazioni (SQL Server)
sp_addumpdevice (Transact-SQL)
Backup completo del database (SQL Server)
Backup differenziali (SQL Server)
Panoramica del backup (SQL Server)
Panoramica del ripristino e del recupero (SQL Server)