Condividi tramite


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

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.

Nota sulla sicurezzaNota sulla sicurezza

È consigliabile non collegare o ripristinare database provenienti da origini sconosciute o non attendibili. Questi database potrebbero contenere malware che può eseguire codice Transact-SQL indesiderato o causare errori modificando lo schema o la struttura fisica di database. Prima di utilizzare un database da un'origine sconosciuta o non attendibile, eseguire DBCC CHECKDB sul database in un server non di produzione ed esaminare inoltre il codice contenuto nel database, ad esempio le stored procedure o altro codice definito dall'utente.

Contenuto dell'argomento

  • Ripristino di un database fino al momento dell'errore

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

  • Attività correlate

[!NOTA]

Per informazioni sul supporto dei backup da 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.

    Nota importanteImportante

    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 ulteriori 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_name FROM backup_device WITH NORECOVERY).

  3. Se sono presenti backup differenziali, ripristinare il più recente senza recuperare il database (RESTORE DATABASE database_name FROM differential_backup_device 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 database_name 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]

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

Sintassi Transact-SQL di base per RESTORE

La sintassi di base RESTORE Transact-SQL 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 full_differential_backup WITH NORECOVERY;

  3. RESTORE LOG database FROM log_backup WITH NORECOVERY;

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

  4. RESTORE DATABASE database WITH RECOVERY;

[Torna all'inizio]

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]

In questo esempio vengono utilizzati un backup del database e un backup del log creati nella sezione "Utilizzo dei backup del database nel modello di recupero con registrazione completa" di Backup completo del database (SQL Server). Il database di esempio AdventureWorks2012 è 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 AdventureWorks2012 
TO DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'  
   WITH NORECOVERY; 
GO
--Restore the full database backup (from backup set 1).
RESTORE DATABASE AdventureWorks2012 
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak' 
  WITH FILE=1, 
    NORECOVERY;

--Restore the regular log backup (from backup set 2).
RESTORE LOG AdventureWorks2012 
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak' 
  WITH FILE=2, 
    NORECOVERY;

--Restore the tail-log backup (from backup set 3).
RESTORE LOG AdventureWorks2012 
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'
  WITH FILE=3, 
    NORECOVERY;
GO
--recover the database:
RESTORE DATABASE AdventureWorks2012 WITH RECOVERY;
GO

[Torna all'inizio]

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ì, eseguire le operazioni seguenti:

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

  2. Ripristinare il backup differenziale del database creato alle 05.00 di mercoledì.

  3. Applicare il backup del log delle transazioni creato alle 05.10 di mercoledì.

  4. Applicare il backup del log delle transazioni creato alle 05.20 di mercoledì, specificando che il processo di recupero si applica solo alle transazioni avvenute prima delle 05.19.

In alternativa, se è necessario ripristinare lo stato del database alle 03.04 di giovedì, ma il backup differenziale del database creato alle 03.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 03.10 di giovedì, arrestando il processo di recupero alle 3:04.

[!NOTA]

Per un esempio di un ripristino temporizzato, vedere Ripristino di un database di SQL Server fino a un punto specifico all'interno di un backup (modello di recupero con registrazione completa).

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

[Inizio pagina]

Vedere anche

Riferimento

RESTORE (Transact-SQL)

BACKUP (Transact-SQL)

sp_addumpdevice (Transact-SQL)

Concetti

Applicazione dei backup di log delle transazioni (SQL Server)

Backup completo del database (SQL Server)

Backup differenziali [SQL Server]

Panoramica del backup (SQL Server)

Panoramica del ripristino e del recupero (SQL Server)