Ripristinare un database al punto di errore nel modello di recupero con registrazione completa (Transact-SQL)
In questo argomento vengono fornite informazioni su come eseguire il ripristino fino al punto di errore. L'argomento è rilevante solo per i database che utilizzano i modelli di recupero con registrazione completa o con registrazione minima delle operazioni bulk.
Per eseguire il ripristino fino al punto di errore
Eseguire il backup della parte finale del log eseguendo l'istruzione BACKUP di base seguente:
BACKUP LOG <database_name> TO <backup_device> WITH NORECOVERY, NO_TRUNCATE;
Eseguire il ripristino di un backup completo del database eseguendo l'istruzione RESTORE DATABASE di base seguente:
RESTORE DATABASE <database_name> FROM <backup_device> WITH NORECOVERY;
Facoltativamente, ripristinare un backup differenziale del database eseguendo l'istruzione RESTORE DATABASE di base seguente:
RESTORE DATABASE <database_name> FROM <backup_device> WITH NORECOVERY;
Applicare tutti i log delle transazioni, incluso il backup della parte finale del log creato nel passaggio 1, specificando WITH NORECOVERY nell'istruzione RESTORE LOG:
RESTORE LOG <database_name> FROM <backup_device> WITH NORECOVERY;
Recuperare il database eseguendo l'istruzione RESTORE DATABASE seguente:
RESTORE DATABASE <database_name> WITH RECOVERY;
Esempio
Prima che sia possibile eseguire l'esempio, è necessario completare le operazioni preliminari seguenti:
Il modello di recupero predefinito del database AdventureWorks2012 è il modello di recupero con registrazione minima. Dato che questo modello di recupero non supporta il ripristino in corrispondenza del punto in cui si è verificato un errore, impostare AdventureWorks2012 per utilizzare il modello di recupero con registrazione completa eseguendo l'istruzione ALTER DATABASE seguente:
USE master; GO ALTER DATABASE AdventureWorks2012 SET RECOVERY FULL;
Creare un backup completo del database utilizzando l'istruzione BACKUP seguente:
BACKUP DATABASE AdventureWorks2012 TO DISK = 'C:\AdventureWorks2012_Data.bck';
Creare un backup del log di routine:
BACKUP LOG AdventureWorks2012 TO DISK = 'C:\AdventureWorks2012_Log.bck';
Nell'esempio seguente vengono ripristinati i backup creati in precedenza, dopo la creazione di un backup della parte finale del log del database AdventureWorks2012 . In questo passaggio si suppone che il disco del log sia accessibile.
Innanzitutto, nell'esempio viene creato un backup della parte finale del log del database che acquisisce il log attivo e lascia il database nello stato di ripristino. Quindi, nell'esempio viene ripristinato il backup del database e vengono applicati il backup del log di routine creato in precedenza e il backup della parte finale del log. Infine viene recuperato il database in un passaggio separato.
[!NOTA]
Il comportamento predefinito consiste nel recuperare un database come parte dell'istruzione che ripristina il backup finale.
/* Example of restoring a to the point of failure */
-- Step 1: Create a tail-log backup by using WITH NORECOVERY.
BACKUP LOG AdventureWorks2012
TO DISK = 'C:\AdventureWorks2012_Log.bck'
WITH NORECOVERY;
GO
-- Step 2: Restore the full database backup.
RESTORE DATABASE AdventureWorks2012
FROM DISK = 'C:\AdventureWorks2012_Data.bck'
WITH NORECOVERY;
GO
-- Step 3: Restore the first transaction log backup.
RESTORE LOG AdventureWorks2012
FROM DISK = 'C:\AdventureWorks2012_Log.bck'
WITH NORECOVERY;
GO
-- Step 4: Restore the tail-log backup.
RESTORE LOG AdventureWorks2012
FROM DISK = 'C:\AdventureWorks2012_Log.bck'
WITH NORECOVERY;
GO
-- Step 5: Recover the database.
RESTORE DATABASE AdventureWorks2012
WITH RECOVERY;
GO