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 che utilizzano il modello di recupero con registrazione completa o con registrazione minima delle operazioni bulk. Presenta 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 (vale a dire, 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 analizzare il database per individuare il punto di recupero ottimale.
Mediante una serie di operazioni di ripristino STANDBY è possibile eseguire il roll forward incrementale del file di dati principale (e, facoltativamente, degli altri file di dati) fino a trovare il punto di recupero ottimale. Dopo avere individuato il punto di recupero ottimale, è possibile eseguire di nuovo il roll forward 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 arresto 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 arrestare 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 arresto.
Importante |
---|
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 arrestare il processo in un momento specifico viene dichiarata quando viene applicato il primo backup del log. In questo esempio l'ora di arresto è 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 arresto in ogni istruzione RESTORE successiva
Un punto di arresto è 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 specifica un numero di sequenza del file di log, è supportato sia nelle istruzioni RESTORE DATABASE che nelle istruzioni RESTORE LOG.
Vedere anche
Riferimento
Concetti
Altre risorse
Cronologia modifiche
Aggiornamento del contenuto |
---|
È 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. |