Esecuzione di un ripristino completo del database (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 consistente 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.

Se si utilizza il modello di recupero con registrazione completa, il database può essere ripristinato fino a uno specifico punto nel tempo. Il punto nel tempo può essere rappresentato dal backup più recente disponibile, da una data e un'ora specifiche o da una transazione contrassegnata.

Nota sulla sicurezzaNota sulla sicurezza

È consigliabile non collegare o ripristinare database provenienti da fonti 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 nel database, ad esempio stored procedure o altro codice definito dall'utente.

Ripristino di un database completo

Il recupero dello stato di un database 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.

  2. Ripristinare il backup completo del database più recente senza recuperare il database (RESTORE DATABASE database_name FROM database_name 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).

  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.

  6. In genere è possibile eseguire il recupero di un ripristino di database completo rispetto a un punto nel tempo o a una transazione contrassegnata all'interno di un backup di 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. Per ulteriori informazioni, vedere Ripristino di un database fino a un punto all'interno di un backup.

Nella figura seguente è illustrato questo processo. Dopo il verificarsi di un errore (1) viene creato un backup della parte finale del log (2). Successivamente, il database viene recuperato fino al momento dell'errore. L'operazione comporta il ripristino e il recupero di un backup completo 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

Quando si ripristina completamente un database, utilizzare una singola sequenza di ripristino. Nell'esempio seguente vengono illustrate le opzioni fondamentali in una sequenza di ripristino per lo scenario di ripristino di database completo nel quale il database viene ripristinato fino al punto di errore. 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. La sintassi e i dettagli non rilevanti verranno omessi.

Vengono eseguiti il ripristino e il rollforward del database. Per ridurre il tempo di rollforward, viene utilizzato un database differenziale. Questa sequenza di ripristino è pensata per eliminare la perdita di dati. L'ultimo backup ripristinato è un backup della parte finale del log.

La sintassi di base di RESTORE per la sequenza di ripristino è 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 backup_log WITH NORECOVERY;

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

  4. RESTORE DATABASE database WITH RECOVERY;

Esempio

Nell'esempio seguente il database di esempio AdventureWorks2008R2 è stato impostato per l'utilizzo del modello di recupero con registrazione completa prima del backup del database. Nell'esempio viene creato un backup della parte finale del log del database AdventureWorks2008R2. Vengono quindi ripristinati un backup completo del database precedente e un backup del log, nonché 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.

L'esempio inizia con un'istruzione ALTER DATABASE che imposta il modello di recupero su FULL.

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

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

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

Recupero fino al punto di errore

Per ripristinare un backup completo del database

Nota importanteImportante

Quando si ripristina un backup del database su un'istanza del server diversa, vedere Copia di database tramite backup e ripristino e Gestione dei metadati quando si rende disponibile un database in un'altra istanza del server.

Per ripristinare un backup differenziale del database

Per ripristinare un backup del log delle transazioni

Dopo aver ripristinato uno o più backup dei dati, è necessario ripristinare tutti i backup dei log delle transazioni successivi, quindi recuperare il database.

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

Recupero temporizzato

Il modello di recupero con registrazione completa consente di ripristinare il database fino a uno specifico punto nel tempo all'interno di un determinato backup del log. Tale punto nel tempo può corrispondere a una data e un'ora specifiche, a una transazione contrassegnata o a un numero di sequenza del file di log (LSN). Per ulteriori informazioni, vedere Ripristino di un database fino a un punto all'interno di un backup.

Supporto per i backup da versioni precedenti di SQL Server

In SQL Server 2008 è possibile ripristinare backup del database creati con SQL Server 2000, SQL Server 2005 o SQL Server 2008. Tuttavia, i backup dei database master, model e msdb creati utilizzando SQL Server 2000 oppure SQL Server 2005 non possono essere ripristinati tramite SQL Server 2008. Non è inoltre possibile ripristinare i backup di SQL Server 2008 in una qualsiasi versione precedente di SQL Server.

SQL Server 2008 utilizza un percorso predefinito diverso rispetto alle versioni precedenti. Per ripristinare un database creato nel percorso predefinito di backup SQL Server 2000 o SQL Server 2005 è pertanto necessario utilizzare l'opzione MOVE. Per informazioni sul nuovo percorso predefinito, vedere Percorsi dei file per le istanze predefinite e denominate di SQL Server.

Nota

Per informazioni su come aggiornare un database creato utilizzando SQL Server 7.0 o versioni precedenti e passare a SQL Server 2005, vedere Copia di database da SQL Server 7.0 o versioni precedenti.