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 non è in linea per la tutta la durata del ripristino. Prima che sia possibile portare in linea 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 protezione |
---|
È 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:
Eseguire il backup del log delle transazioni attive (definito anche 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 ulteriori informazioni, vedere Backup della parte finale del log.
Ripristinare il backup completo del database più recente senza recuperare il database (RESTORE DATABASE database_name WITH NORECOVERY).
Se sono presenti backup differenziali, ripristinare il più recente senza recuperare il database (RESTORE DATABASE database_name FROM differential_backup_device WITH NORECOVERY).
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 database_name WITH RECOVERY). In alternativa, è possibile eseguire questo passaggio insieme al ripristino dell'ultimo backup del log.
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.
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:
RESTORE DATABASE database FROM full database backup WITH NORECOVERY;
RESTORE DATABASE database FROM full_differential_backup 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
Nell'esempio seguente il database di esempio AdventureWorks è 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 AdventureWorks. 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 AdventureWorks
TO DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'
WITH NORECOVERY;
GO
--Restore the full database backup (from backup set 1).
RESTORE DATABASE AdventureWorks
FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'
WITH FILE=1,
NORECOVERY;
--Restore the regular log backup (from backup set 2).
RESTORE LOG AdventureWorks
FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'
WITH FILE=2,
NORECOVERY;
--Restore the tail-log backup (from backup set 3).
RESTORE LOG AdventureWorks
FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'
WITH FILE=3,
NORECOVERY;
GO
--recover the database:
RESTORE DATABASE AdventureWorks WITH RECOVERY;
GO
Ripristino fino al punto di errore
Per ripristinare un backup completo del database
Procedura: Ripristino di un backup del database (Transact-SQL)
Procedura: Ripristino di un backup del database (SQL Server Management Studio)
Importante |
---|
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
Procedura: Ripristino di un backup differenziale di database (Transact-SQL)
Procedura: Ripristino di un backup differenziale del database (SQL Server Management Studio)
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.
Procedura: Applicazione del backup di un log delle transazioni (Transact-SQL)
Procedura: Ripristino di un backup del log delle transazioni (SQL Server Management Studio)
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.
Cronologia modifiche
Aggiornamento del contenuto |
---|
Nella sezione "Ripristino di un database completo" è stata corretta la sintassi per il ripristino di un backup differenziale nel passaggio 3. |
Nella sezione "Ripristino di un database completo" è stato corretto il codice di esempio per la creazione di un backup della parte finale del log. |
Vedere anche