Procedura: Applicazione del backup di un log delle transazioni (Transact-SQL)
Per applicare un backup del log delle transazioni a un database, è necessario che vengano soddisfatti i requisiti seguenti:
Prima della creazione del backup completo o differenziale del database più recente, è necessario che il database utilizzi il modello di recupero con registrazione completa o il modello di recupero con registrazione minima delle operazioni bulk.
La sequenza di ripristino per il ripristino dei backup precedenti deve includere l'opzione WITH NORECOVERY.
I backup del log devono essere applicati nella sequenza in cui sono stati creati, senza gap nella catena di log. Fatta eccezione per l'ultimo backup del log, è necessario utilizzare l'opzione WITH NORECOVERY, come illustrato di seguito:
RESTORE LOG <database_name> FROM <backup_device> WITH NORECOVERY;
Quando viene applicato l'ultimo backup del log, è possibile eseguire una delle operazioni seguenti:
Recuperare il database nell'ambito dell'ultima istruzione BACKUP LOG:
RESTORE LOG <database_name> FROM <backup_device> WITH RECOVERY; GO
Posticipare il recupero del database utilizzando un'istruzione RESTORE DATABASE separata:
RESTORE LOG <database_name> FROM <backup_device> WITH NORECOVERY; RESTORE DATABASE <database_name> WITH RECOVERY; GO
Il posticipo del recupero del database consente di verificare di avere ripristinato tutti i backup del log necessari. Questo approccio è spesso consigliato quando si esegue un ripristino temporizzato.
Importante |
---|
È consigliabile specificare sempre in modo esplicito WITH NORECOVERY oppure WITH RECOVERY in ogni istruzione RESTORE per evitare ambiguità. Questa precauzione è particolarmente importante durante la scrittura di script. |
Per applicare un backup del log delle transazioni
Eseguire l'istruzione RESTORE LOG specificando:
Il nome del database a cui verrà applicato il log delle transazioni.
Il dispositivo di backup da cui verrà ripristinato il backup del log delle transazioni.
La clausola NORECOVERY.
La sintassi di base per questa istruzione è la seguente:
RESTORE LOG database_name FROM <backup_device> WITH NORECOVERY
dove database_name è il nome del database e <backup_device>è il nome del dispositivo che contiene il backup del log in fase di ripristino.
Ripetere il passaggio 1 per ogni backup del log delle transazioni che si desidera applicare.
Dopo aver ripristinato l'ultimo backup della sequenza di ripristino, per recuperare il database utilizzare l'istruzione seguente:
RESTORE database_name WITH RECOVERY
Importante Se si sta creando un database mirror, omettere il passaggio di recupero. Un database mirror deve rimanere nello stato RESTORING.
Esempio
Per impostazione predefinita, il database AdventureWorks2008R2 utilizza il modello di recupero con registrazione minima. Per gli esempi seguenti è necessario modificare questo database in modo da utilizzare il modello di recupero con registrazione completa, come illustrato di seguito:
ALTER DATABASE AdventureWorks2008R2 SET RECOVERY FULL
A. Applicazione di un singolo backup del log delle transazioni
Nell'esempio seguente viene innanzitutto ripristinato il database AdventureWorks2008R2 da un backup completo del database che risiede in un dispositivo di backup denominato AdventureWorks2008R2_1. Viene quindi applicato il primo backup del log delle transazioni che risiede nel dispositivo di backup denominato AdventureWorks2008R2_log e infine viene recuperato il database.
RESTORE DATABASE AdventureWorks2008R2
FROM AdventureWorks2008R2_1
WITH NORECOVERY
GO
RESTORE LOG AdventureWorks2008R2
FROM AdventureWorks2008R2_log
WITH FILE = 1,
WITH NORECOVERY
GO
RESTORE DATABASE AdventureWorks2008R2
WITH RECOVERY
GO
B. Applicazione di più backup del log delle transazioni
Nell'esempio seguente viene innanzitutto ripristinato il database AdventureWorks2008R2 da un backup completo del database che risiede in un dispositivo di backup denominato AdventureWorks2008R2_1. Vengono quindi applicati in successione i primi tre backup del log delle transazioni che risiedono in uno dispositivo di backup denominato AdventureWorks2008R2_log e infine viene recuperato il database.
RESTORE DATABASE AdventureWorks2008R2
FROM AdventureWorks2008R2_1
WITH NORECOVERY
GO
RESTORE LOG AdventureWorks2008R2
FROM AdventureWorks2008R2_log
WITH FILE = 1,
NORECOVERY
GO
RESTORE LOG AdventureWorks2008R2
FROM AdventureWorks2008R2_log
WITH FILE = 2,
WITH NORECOVERY
GO
RESTORE LOG AdventureWorks2008R2
FROM AdventureWorks2008R2_log
WITH FILE = 3,
WITH NORECOVERY
GO
RESTORE DATABASE AdventureWorks2008R2
WITH RECOVERY
GO
Vedere anche