Esecuzione di operazioni di ripristino di file (modello di recupero con registrazione completa)

Le informazioni in questo argomento sono rilevanti solo per i database che contengono più file o filegroup e che utilizzano il modello di recupero con registrazione completa o con registrazione minima delle operazioni bulk.

L'obiettivo di un ripristino di file consiste nel ripristinare uno o più file danneggiati senza ripristinare l'intero database. Tutte le edizioni di SQL Server supportano il ripristino di file quando il database non è in linea (ripristino non in linea della pagina). SQL Server 2005 Standard, SQL Server 2005 Express Edition e SQL Server 2005 Workgroup e versioni successive supportano solo il ripristino non in linea e per il ripristino di un file nel filegroup primario è sempre necessario che il database non sia in linea. In SQL Server 2005 Enterprise Edition e versioni successive viene utilizzato il ripristino non in linea se il database è già non in linea.

In SQL Server 2005 Enterprise Edition e versioni successive se il database è in linea durante il ripristino di un file, esso rimane in linea. Il ripristino e recupero di un file quando il database è in linea viene definito ripristino del file in linea.

Sono disponibili gli scenari di ripristino seguenti:

  • Ripristino di file non in linea

    In un ripristino di file non in linea, i file o i filegroup danneggiati vengono ripristinati mentre il database non è in linea. Al termine della sequenza di ripristino, il database torna in linea.

  • Ripristino di file in linea

    In SQL Server 2005 Enterprise Edition e versioni successive il ripristino di file viene eseguito automaticamente in linea quando il database è in linea. I filegroup contenenti file in fase di ripristino, invece, non sono in linea. Al termine del recupero di tutti i file del filegroup non in linea, viene attivata automaticamente la modalità in linea per il filegroup. Per ulteriori informazioni sui ripristini in linea, vedere Esecuzione di ripristini in linea.

    Nota

    È possibile eseguire query e aggiornamenti solo nei filegroup in linea. Se si tenta di accedere a un filegroup non in linea, incluso un filegroup contenente un file in fase di ripristino o di recupero, verrà generato un errore.

Se il filegroup in fase di ripristino è di lettura/scrittura, è necessario applicare una catena non interrotta di backup del log dopo il ripristino degli ultimi dati o del backup differenziale per portare il filegroup fino ai record di log inclusi nei record di log attivi correnti del file di log. Il punto di ripristino si trova in genere, ma non necessariamente, verso la fine del log.

Se il filegroup in fase di ripristino è di sola lettura, l'applicazione di backup del log in genere non è necessaria e viene ignorata. Se il backup è stato creato dopo l'impostazione del file in modalità di sola lettura, esso verrà ripristinato per ultimo. Il rollforward viene interrotto in corrispondenza del punto di destinazione.

Ripristino di file o filegroup

Per ripristinare uno o più file danneggiati da backup dei file e backup differenziali dei file

  1. Creare un backup della parte finale del log delle transazioni attivo.

    Se l'operazione è impossibile poiché il log è stato danneggiato, sarà necessario ripristinare l'intero database. Per informazioni sul backup di un log delle transazioni, vedere Creazione di backup del log delle transazioni.

    Nota importanteImportante

    Per un ripristino di file non in linea, è sempre necessario creare un backup della parte finale del log prima del ripristino del file. Per un ripristino di file in linea, è sempre necessario creare il backup del log dopo il ripristino del file per fare in modo che il file recuperato si trovi in uno stato consistente con il resto del database.

  2. Ripristinare ogni file danneggiato dal backup del file più recente.

  3. Ripristinare l'eventuale backup differenziale del file più recente per ogni file ripristinato.

  4. Ripristinare i backup del log delle transazioni in sequenza, iniziando con il backup associato al file ripristinato meno recente e terminando con il backup della parte finale del log creato nel passaggio 1.

    È necessario ripristinare tutti i backup del log delle transazioni creati successivamente ai backup di file per assicurare la consistenza del database. Il rollforward dei backup del log delle transazioni è un'operazione rapida, in quanto vengono applicate soltanto le modifiche valide per i file ripristinati. Il ripristino di singoli file può offrire risultati migliori rispetto al ripristino dell'intero database poiché i file non danneggiati non vengono copiati e non ne viene eseguito il rollforward. Deve comunque essere letta l'intera catena dei backup di log.

  5. Recuperare il database.

Nota

I backup dei file possono essere utilizzati per ripristinare il database a una temporizzazione precedente. A tale scopo, è necessario ripristinare un set completo di backup dei file e quindi ripristinare i backup del log delle transazioni in sequenza, fino a raggiungere un punto nel tempo successivo al backup di file più recente ripristinato. Per ulteriori informazioni sul recupero temporizzato, vedere Ripristino di un database fino a un punto all'interno di un backup.

Ripristino di file e filegroup

Argomenti avanzati

Sequenza di ripristino Transact-SQL per il ripristino di file non in linea (modello di recupero con registrazione completa)

Uno scenario di ripristino di file consiste in un'unica sequenza di ripristino in cui vengono eseguiti la copia, il rollforward e il recupero dei dati appropriati.

Il codice Transact-SQL seguente mostra le opzioni RESTORE critiche in una sequenza di ripristino per lo scenario del ripristino di file. La sintassi e i dettagli non rilevanti verranno omessi.

In questo esempio viene illustrato un ripristino non in linea di due file secondari, A e B, con NORECOVERY. Successivamente vengono applicati due backup del log con NORECOVERY, seguiti dal backup della parte finale del log, che viene ripristinato con RECOVERY. Questo esempio inizia con l'impostazione del file come non in linea per eseguire un ripristino di file non in linea.

--Take the file offline.
ALTER DATABASE database_name MODIFY FILE SET OFFLINE
-- Back up the currently active transaction log.
BACKUP LOG database_name
   TO <tail_log_backup>
   WITH NORECOVERY
GO 
-- Restore the files.
RESTORE DATABASE database_name FILE=<name> 
   FROM <file_backup_of_file_A> 
   WITH NORECOVERY
RESTORE DATABASE database_name FILE=<name> ......
   FROM <file_backup_of_file_B> 
   WITH NORECOVERY
-- Restore the log backups.
RESTORE LOG database_name FROM <log_backup> 
   WITH NORECOVERY
RESTORE LOG database_name FROM <log_backup> 
   WITH NORECOVERY
RESTORE LOG database_name FROM <tail_log_backup> 
   WITH RECOVERY