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.
Importante
È 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 imprevisto o causare errori modificando lo schema o la struttura fisica del 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 il codice contenuto nel database, ad esempio le stored procedure o altro codice definito dall'utente.
Contenuto dell'argomento
Nota
Per informazioni sul supporto per i backup delle versioni precedenti di SQL Server, vedere la sezione "Supporto per la 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:
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).
Ripristinare il backup completo del database più recente senza recuperare il database (RESTORE DATABASE _database FROM _backup WITH NORECOVERY).
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.
Ripristinare i log in sequenza con NORECOVERY a partire dal primo backup del log delle transazioni creato dopo il backup appena ripristinato.
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.
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 Transact-SQL RESTOREdi base per la sequenza di ripristino nella figura precedente è la seguente:
RESTORE DATABASE database FROM full database backup WITH NORECOVERY;
RESTORE DATABASE database FROM backup_differenziale_completo WITH NORECOVERY;
RESTORE LOG database FROM backup_log WITH NORECOVERY;
Ripetere questo passaggio di ripristino del log per ogni ulteriore backup del log.
RESTORE DATABASE database WITH RECOVERY;
Esempio: ripristino fino al momento dell'errore (Transact-SQL)
Nell'esempio Transact-SQL seguente vengono illustrate le opzioni essenziali in una sequenza di ripristino che ripristina il database fino al punto di 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 viene usato un backup del database e un backup del log creato nella sezione "Using Database Backups Under the Full Recovery Model" in Full Database Backups (SQL Server). Prima del backup del database, il database di esempio AdventureWorks2012 è stato impostato per l'uso del modello di recupero con registrazione completa.
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
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:
Ripristinare il backup completo del database creato martedì a mezzanotte.
Ripristinare il backup differenziale del database creato alle 05.00 di mercoledì.
Applicare il backup del log delle transazioni creato alle 05.10 di mercoledì.
Applicare il backup del log delle transazioni creato alle 05.20 di mercoledì, specificando l'applicazione delle sole 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:
Ripristinare il backup del database creato mercoledì a mezzanotte.
Ripristinare il backup differenziale del database creato alle 02.00 di giovedì.
Applicare tutti i backup del log delle transazioni creati dalle 02.10 alle 03.00 di giovedì.
Applicare il backup del log delle transazioni creato alle 03.10 di giovedì, arrestando il processo di recupero alle 03.04.
Nota
Per un esempio di ripristino temporizzato, vedere Ripristinare un database SQL Server a un punto nel tempo (modello di recupero con registrazione completa).
Attività correlate
Per ripristinare un backup completo del database
Ripristino di un backup del database (SQL Server Management Studio)
Ripristino di un database in una nuova posizione (SQL Server)
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
Recupero di database correlati che contengono transazioni contrassegnate
Recupero fino a un numero di sequenza del file di log (SQL Server)
Vedere 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]
Backup Overview (SQL Server)
Panoramica del ripristino e del recupero (SQL Server)