Esecuzione di ripristini a fasi

 Le informazioni contenute in questo argomento sono rilevanti solo per i database di SQL Server 2005 Enterprise Edition e versioni successive che contengono più file o filegroup e, nel modello di recupero con registrazione minima, solo per i filegroup di sola lettura.

In SQL Server 2005 e nelle versioni successive, i database che contengono più filegroup possono essere ripristinati e recuperati in vari passaggi tramite un processo noto come ripristino a fasi. Il ripristino a fasi include una serie di sequenze di ripristino, a partire dal filegroup primario e, in alcuni casi, da uno o più filegroup secondari. Dopo il completamento della sequenza di ripristino, i file recuperati, se validi e consistenti con il database, possono essere portati in linea direttamente.

È possibile utilizzare il ripristino a fasi con tutti i modelli di recupero, ma la massima flessibilità si ottiene con i modelli di recupero con registrazione completa o con registrazione minima delle operazioni bulk, piuttosto che con il modello di recupero con registrazione minima.

Nota

Il ripristino a fasi è più versatile del ripristino parziale di SQL Server 2000, in quanto è possibile ripristinare i filegroup non ripristinati in un momento successivo.

Ogni ripristino a fasi inizia con una sequenza di ripristino iniziale detta sequenza di ripristino parziale. Come minimo, la sequenza di ripristino parziale ripristina e recupera il filegroup primario e, nel modello di recupero con registrazione minima, tutti i filegroup di lettura/scrittura. Durante la sequenza di ripristino a fasi, è necessario che l'intero database venga portato non in linea. Quindi, il database è in linea e i filegroup ripristinati sono disponibili. Tuttavia, eventuali filegroup non ancora ripristinati rimangono non in linea.

Indipendentemente dal modello di recupero utilizzato dal database, la sequenza di ripristino parziale inizia con un'istruzione RESTORE DATABASE che ripristina un backup completo e specifica l'opzione PARTIAL. L'opzione PARTIAL avvia sempre un nuovo ripristino a fasi. Pertanto, è necessario specificare PARTIAL solo una volta nell'istruzione iniziale della sequenza di ripristino parziale. Quando la sequenza di ripristino parziale termina e il database viene portato in linea, lo stato dei file rimanenti diventa "recupero in sospeso" in quanto il loro recupero è stato posticipato.

Successivamente, un ripristino a fasi include in genere una o più sequenze di ripristino, dette sequenze di ripristino dei filegroup. È possibile attendere il periodo di tempo desiderato prima di eseguire una sequenza di ripristino dei filegroup specifica. Ogni sequenza di ripristino dei filegroup ripristina e recupera uno o più filegroup non in linea rispetto a un punto consistente con il database. Momento di esecuzione e numero delle sequenze di ripristino dei filegroup dipendono dall'obiettivo del recupero, dal numero di filegroup non in linea che si desidera ripristinare e dal numero di tali filegroup ripristinati per ogni sequenza di ripristino dei filegroup.

I requisiti esatti per l'esecuzione di un ripristino a fasi dipendono dal modello di recupero del database. Per ulteriori informazioni, vedere "Ripristino a fasi nel modello di recupero con registrazione minima" e "Ripristino a fasi nel modello di recupero con registrazione completa" di seguito in questo argomento.

Scenari di ripristino a fasi

Tutte le edizioni di SQL Server supportano il ripristino a fasi non in linea. In SQL Server 2005 Enterprise Edition e nelle versioni successive un ripristino a fasi può essere in linea o non in linea. Le implicazioni del ripristino a fasi non in linea e in linea sono le seguenti:

  • Scenari di ripristino a fasi non in linea

    In un ripristino a fasi non in linea, il database è in linea dopo la sequenza di ripristino parziale. I filegroup non ancora ripristinati rimangono non in linea, ma possono essere ripristinati secondo le esigenze dopo aver portato il database non in linea.

  • Scenari di ripristino a fasi in linea

    In un ripristino a fasi in linea, dopo la sequenza di ripristino parziale, il database è in linea e il filegroup primario è disponibile insieme ad eventuali filegroup secondari recuperati. I filegroup non ancora ripristinati rimangono non in linea, ma è possibile ripristinarli in base alle necessità mentre il database rimane in linea.

    Il ripristino a fasi in linea può coinvolgere le transazioni posticipate. Quando è stato ripristinato un solo subset di filegroup, le transazioni nel database che dipendono dai filegroup in linea possono diventare posticipate. Si tratta di una situazione comune, in quanto l'intero database deve essere consistente. Per ulteriori informazioni, vedere Transazioni posticipate.

Restrizioni

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.

Ripristino a fasi nel modello di recupero con registrazione minima

Nel modello di recupero con registrazione minima la sequenza del ripristino a fasi deve iniziare con un backup completo o parziale del database. Quindi, se il backup ripristinato è una base differenziale, ripristinare il backup differenziale più recente.

Durante la prima sequenza di ripristino parziale, se si ripristina solo un subset di filegroup di lettura/scrittura, qualsiasi filegroup non ripristinato diventa non attivo quando si recupera il database parzialmente ripristinato. L'omissione di un filegroup di lettura/scrittura dalla sequenza di ripristino parziale è adeguata solo nei casi seguenti:

  • Si desidera che i filegroup non ripristinati diventino inattivi.

  • La sequenza di ripristino arriverà a un punto di recupero in corrispondenza del quale ogni filegroup non ripristinato è diventato di sola lettura, è stato eliminato o è inattivo (durante un ripristino precedente nella sequenza di ripristino parziale).

  • Il backup completo è stato eseguito mentre il database utilizzava il modello di recupero con registrazione minima, ma il punto di recupero si trova in corrispondenza di un punto nel tempo in cui il database utilizza il modello di recupero con registrazione completa. Per ulteriori informazioni, vedere "Esecuzione di un ripristino a fasi di un database il cui modello di recupero è passato da semplice a completo" di seguito in questo argomento.

Requisiti per il ripristino a fasi nel modello di recupero con registrazione minima

Nel modello di recupero con registrazione minima, la fase iniziale ripristina e recupera il filegroup primario e tutti i filegroup secondari di lettura/scrittura. Dopo il completamento della fase iniziale, i file recuperati, se validi e consistenti con il database, possono essere portati in linea direttamente.

Quindi, è possibile ripristinare i filegroup di sola lettura in una o più fasi aggiuntive.

Il ripristino a fasi è disponibile per un filegroup secondario di sola lettura solo se sono vere le condizioni seguenti:

  • Il filegroup era di sola lettura quando ne è stato eseguito il backup.

  • Il filegroup è rimasto di sola lettura (mantenendolo consistente dal punto di vista logico con il filegroup primario).

Per eseguire un ripristino a fasi, è necessario seguire le linee guida seguenti:

  • Un set completo di backup per il ripristino a fasi di un database con modello di recupero con registrazione minima deve contenere gli elementi seguenti:

    • Un backup del database parziale o completo che contiene il filegroup primario e tutti i filegroup che erano di lettura/scrittura al momento del backup.

    • Un backup di ogni file di sola lettura.

  • Perché il backup di un file di sola lettura sia consistente con il filegroup primario, è necessario che il filegroup secondario sia stato di sola lettura dal momento dell'esecuzione del backup fino al completamento del backup che contiene il filegroup primario. È possibile utilizzare backup differenziali dei file, a condizione che siano stati creati dopo che il filegroup è diventato di sola lettura.

Fasi del ripristino a fasi (modello di recupero con registrazione minima

Lo scenario del ripristino a fasi include le fasi seguenti:

  • Fase iniziale (ripristino e recupero del filegroup primario e di tutti i filegroup di lettura/scrittura)

    Nella fase iniziale viene eseguito un ripristino parziale, ovvero la sequenza di ripristino parziale ripristina il filegroup primario, tutti i filegroup secondari di lettura/scrittura e (facoltativamente) alcuni dei filegroup di sola lettura. Durante la fase iniziale, è necessario che l'intero database venga portato non in linea. Dopo la fase iniziale, il database è in linea e i filegroup ripristinati sono disponibili. Tuttavia, eventuali filegroup di sola lettura non ancora ripristinati rimangono non in linea.

    La prima istruzione RESTORE nella fase iniziale deve eseguire le operazioni seguenti:

    • Utilizzare un backup parziale o completo del database che contiene il filegroup primario e tutti i filegroup che erano di lettura/scrittura al momento del backup. In genere una sequenza di ripristino parziale viene avviata tramite il ripristino di un backup parziale.

    • Specificare l'opzione PARTIAL, che indica l'inizio di un ripristino a fasi.

    Nota

    La fase iniziale di un ripristino a fasi sostituisce il ripristino di database parziale in SQL Server 2000. In SQL Server 2005 e nelle versioni successive l'opzione PARTIAL esegue i controlli di sicurezza omessi dal ripristino di database parziale. Pertanto, il database risultante è adatto per essere utilizzato come database di produzione.

    • Specificare l'opzione READ_WRITE_FILEGROUPS nel caso di un backup completo del database.
  • Mentre il database è in linea, è possibile utilizzare uno o più ripristini dei file in linea per ripristinare e recuperare i file di sola lettura non in linea che erano di sola lettura al momento del backup. Il momento in cui eseguire i ripristini dei file in linea dipende da quando si desidera che i dati siano in linea.

    La necessità di ripristinare i dati in un file dipende dagli elementi seguenti:

    • I file di sola lettura validi consistenti con il database possono essere portati in linea direttamente recuperandoli senza ripristinare alcun dato.

    • I file danneggiati o inconsistenti con il database devono essere ripristinati prima che siano recuperati.

Esempi

Ripristino a fasi nel modello di recupero con registrazione completa

Nel modello di recupero con registrazione completa o nel modello di recupero con registrazione minima delle operazioni bulk, il ripristino a fasi è disponibile per qualsiasi database che contiene più filegroup, ed è possibile ripristinare un database rispetto a qualsiasi punto nel tempo. Le sequenze di ripristino di un ripristino a fasi funzionano nel modo seguente:

  • Sequenza di ripristino parziale

    La sequenza di ripristino parziale ripristina il filegroup primario e, facoltativamente, alcuni dei filegroup secondari.

    La prima istruzione RESTORE DATABASE deve eseguire le operazioni seguenti:

    • Specificare l'opzione PARTIAL. Questo indica l'avvio di un ripristino a fasi.

    • Utilizzare un backup completo del database che contiene il filegroup primario. In genere una sequenza di ripristino parziale viene avviata tramite il ripristino di un backup parziale.

    • Per eseguire il ripristino rispetto a un punto nel tempo specifico, è necessario impostare il tempo nella sequenza di ripristino parziale. Ogni passaggio successivo della sequenza di ripristino deve specificare lo stesso punto nel tempo.

  • Le sequenze di ripristino dei filegroup portano in linea filegroup aggiuntivi rispetto a un punto consistente con il database.

    In SQL Server 2005 Enterprise Edition e nelle versioni successive qualsiasi filegroup secondario non in linea può essere ripristinato e recuperato mentre il database rimane in linea. Se un file di sola lettura specifico è consistente con il database e non è danneggiato, non è necessario ripristinarlo. Per ulteriori informazioni, vedere Recupero di un database senza ripristino dei dati.

Applicazione dei backup del log

Se un filegroup di sola lettura è stato tale fin da prima della creazione del backup del file, l'applicazione dei backup del log al filegroup non è necessaria e non viene eseguita dal ripristino del file. Se il filegroup è di lettura/scrittura, per aggiornare il filegroup rispetto al file di log attuale è necessario che venga applicata una catena ininterrotta di backup del log all'ultimo ripristino completo o differenziale.

Esempi

Esecuzione di un ripristino a fasi di un database il cui modello di recupero è passato da semplice a completo

È possibile eseguire un ripristino a fasi di un database che è passato dal modello di recupero con registrazione minima al modello di recupero con registrazione completa a partire dal momento del backup completo o parziale del database. Ad esempio, si prenda in considerazione un database per cui vengono eseguiti i passaggi seguenti:

  1. Creare un backup parziale (backup_1) di un database con modello di recupero con registrazione minima.

  2. Dopo un determinato intervallo di tempo, passare al modello di recupero con registrazione completa.

  3. Creare un backup differenziale.

  4. Avviare l'esecuzione dei backup del log.

La sequenza seguente è pertanto valida:

  1. Un ripristino parziale che omette alcuni filegroup secondari.

  2. Un ripristino differenziale, seguito da eventuali altri ripristini necessari.

  3. Successivamente, un ripristino del file di un filegroup secondario di lettura/scrittura WITH NORECOVERY dal backup parziale backup_1

  4. Il backup differenziale seguito da tutti i backup ripristinati durante la sequenza del ripristino a fasi originale per ripristinare i dati fino al punto di recupero originale.