Condividi tramite


Procedure consigliate per il recupero di un database fino a un punto di recupero specifico

Le informazioni contenute in questo argomento sono rilevanti solo per i database di SQL Server in cui vengono utilizzati i modelli di recupero con registrazione completa o con registrazione minima delle operazioni bulk. Sono disponibili alcune procedure consigliate per il ripristino di un database a un punto di recupero specifico (una temporizzazione, una transazione contrassegnata o un numero di sequenza del file di log (LSN)).

Utilizzo dell'opzione STANDBY per la ricerca di un punto sconosciuto nel tempo

A volte è necessario ripristinare un database secondo una temporizzazione specifica, ma non si conosce con esattezza la temporizzazione che soddisfa meglio l'obiettivo del ripristino (ovvero il punto di recupero ottimale). Per scoprire tale punto di recupero, è possibile utilizzare RESTORE … WITH STANDBY **=**nome_file_standby insieme a una clausola STOPAT la cui ora di destinazione precede il punto di recupero desiderato. Un'operazione di ripristino STANDBY consente di recuperare il database per l'accesso in sola lettura e di analizzarlo per individuare il punto di recupero ottimale.

Mediante una serie di operazioni di ripristino STANDBY è possibile eseguire il rollforward incrementale del file di dati principale (e, facoltativamente, degli altri file di dati) fino a trovare il punto di recupero ottimale. Dopo aver individuato il punto di recupero ottimale, è possibile eseguire di nuovo il rollforward del database, specificando WITH STOPAT per indicare il punto di recupero ottimale come il punto nel tempo previsto. Quando si raggiunge tale punto nel tempo previsto, ripristinare il database parziale mediante l'opzione WITH RECOVERY.

È possibile ripristinare e recuperare eventuali file rimanenti in modo che siano coerenti con il database. Dopo aver ripristinato l'ultimo backup del log completo, ripristinare il primo backup del log eseguito dopo il punto di recupero di destinazione.

Per ulteriori informazioni sull'opzione STANDBY, vedere Argomenti dell'istruzione RESTORE (Transact-SQL).

Impostazione del punto nel tempo all'inizio di una 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. Maggiore è la quantità di informazioni specificate sull'obiettivo della sequenza, inferiore sarà il rischio che si verifichino errori che potrebbero richiedere la reimpostazione dei dati. Per il ripristino temporizzato, in Motore di database di SQL Server vengono utilizzate le informazioni specificate all'inizio di una sequenza di ripristino e in una fase successiva della sequenza al fine di identificare il punto nel tempo che costituisce l'obiettivo del ripristino. Se durante la sequenza si attende troppo a lungo, si verificherà un errore. È necessario specificare le informazioni di interruzione nella fase iniziale della sequenza di ripristino per fare in modo che il processo non prosegua oltre il punto nel tempo che costituisce l'obiettivo.

Se si intende interrompere la sequenza in un punto di recupero specifico, è consigliabile indicarlo in ogni istruzione RESTORE LOG, utilizzando STOPAT, STOPBEFOREMARK o STOPATMARK, insieme all'opzione RECOVERY. Quando si utilizzano le opzioni RECOVERY e STOPAT in combinazione, se il backup del log delle transazioni non contiene i dati corrispondenti all'ora richiesta, ad esempio se l'ora specificata è successiva al periodo di tempo coperto dal log delle transazioni, viene generato un messaggio di avviso e il database non viene recuperato. Quando viene raggiunto il punto di recupero, il database viene recuperato e un tentativo di ripristinare un altro backup del log ha esito negativo. L'utilizzo delle opzioni RECOVERY e STOPAT in combinazione durante un ripristino di un backup del log consente di garantire che nessuna operazione di ripristino del log vada oltre l'ora di interruzione.

Nota importanteImportante

Se una sequenza di ripristino parziale esclude qualsiasi filegroup FILESTREAM, il ripristino temporizzato non è supportato. È possibile forzare la continuazione della sequenza di ripristino. Tuttavia i filegroup FILESTREAM omessi dall'istruzione RESTORE non potranno mai più essere ripristinati. Per forzare un ripristino temporizzato, specificare l'opzione CONTINUE_AFTER_ERROR insieme all'opzione STOPAT, STOPATMARK o STOPBEFOREMARK che è necessario specificare anche nelle istruzioni RESTORE LOG successive. Se si specifica CONTINUE_AFTER_ERROR, la sequenza di ripristino parziale riesce e il filegroup FILESTREAM diviene irrecuperabile.

Esempio: Ripristino temporizzato

Nella sequenza di ripristino dell'esempio seguente, l'intenzione di interrompere il processo in un momento specifico viene dichiarata quando viene applicato il primo backup del log. In questo esempio l'ora di interruzione è inclusa nel primo backup del log dopo il backup differenziale.

RESTORE DATABASE database_name FROM full_backup 
    WITH NORECOVERY;
RESTORE DATABASE database_name FROM full_differential_backup 
    WITH NORECOVERY;
RESTORE LOG database_name FROM log_backup 
    WITH STOPAT = time, RECOVERY;
RESTORE LOG database_name FROM log_backup 
    WITH STOPAT = time, RECOVERY;

L'esito positivo del ripristino di un log specifico dipende dal fatto che time sia compreso nell'intervallo acquisito da un backup del log, come descritto nella tabella seguente.

Relazione tra time e l'intervallo acquisito dal backup del log

Effetto

time è precedente all'intervallo.

Il ripristino ha esito negativo e il rollforward non viene eseguito.

time è incluso nell'intervallo.

L'ultimo ripristino ha esito positivo e il database viene recuperato.

time è successivo all'intervallo.

Il rollforward ha esito positivo, ma il database non viene recuperato, in quanto non è stato ancora raggiunto il valore di time.

Dichiarazione del punto di interruzione in ogni istruzione RESTORE successiva

Un punto di interruzione è specifico dell'istruzione che include l'opzione STOPAT, STOPBEFOREMARK o STOPATMARK. Se tale opzione viene omessa in un'istruzione RESTORE, viene ripristinato il backup completo.

Man mano che una sequenza di ripristino temporizzato avanza, è possibile modificare il punto di recupero specificando un nuovo valore per time, a condizione che il database non abbia superato tale nuovo valore di time.

[!NOTA]

Le opzioni STOPBEFOREMARK e STOPATMARK prevedono due parametri, mark_name e lsn_number. Il parametro mark_name, che identifica un contrassegno di transazione in un backup del log, è supportato solo nelle istruzioni RESTORE LOG. Il parametro lsn_number, che consente di specificare un numero di sequenza del file di log, è supportato sia nelle istruzioni RESTORE DATABASE sia nelle istruzioni RESTORE LOG.

Cronologia modifiche

Contenuto aggiornato

È stata corretta la sezione "Utilizzo dell'opzione STANDBY per la ricerca di un punto sconosciuto nel tempo" per chiarire che WITH STANDBY consente solo di annullare gli effetti del processo di recupero.