Controllo della creazione di file aggiunti durante l'esecuzione del rollforward
In genere, le modifiche apportate a file e filegroup dopo un backup completo vengono gestite in modo trasparente. Se viene aggiunto un file a un database dopo l'ultimo backup del filegroup, quando si ripristina il database, l'approccio più semplice consiste nel consentire che durante l'operazione di ripristino vengano ricreati automaticamente tutti i file nel database ripristinato. È tuttavia possibile che vengano ricreati inutilmente file di sola lettura non danneggiati. Quando si utilizza il ripristino per correggere un problema noto e isolato, è possibile ottimizzare le prestazioni ripristinando solo i file in cui il problema è presente.
Nota
Se si ripristina un backup contenente file che il Motore di database di SQL Server prevede saranno eliminati, il Motore di database di SQL Server ignora le fasi di copia dei dati e rollforward per tali file. Per informazioni su queste fasi, vedere Informazioni sul funzionamento dei processi di ripristino e recupero dei backup in SQL Server.
Se il ripristino determini o meno la creazione di un file dipende dal fatto che in un'istruzione RESTORE DATABASE vengano specificati file o pagine, come segue:
Se non vengono specificati file o pagine specifiche
Si tratta dello scenario tipico. In presenza di una voce di log che aggiunge un file al database, il ripristino crea automaticamente il file e lo aggiunge al set di rollforward. Il comportamento effettivo dipende dal fatto che nell'istruzione RESTORE DATABASE vengano specificati filegroup. Se non si specificano filegroup, tutti i nuovi file vengono creati e aggiunti al set di rollforward. Se si specificano filegroup, un nuovo file viene creato e aggiunto al set di rollforward solo se appartiene a un filegroup specificato.
Procedura consigliata: nella maggior parte delle operazioni di ripristino evitare di indicare elenchi di file specifici per consentire la ricreazione automatica di tutti i file creati dalle transazioni registrate.
Se vengono specificati file o pagine specifiche
L'indicazione di file o pagine specifiche nell'istruzione RESTORE DATABASE definisce esattamente il set di rollforward. Quando si indicano file o pagine, il ripristino segue esattamente le istruzioni, ripristinando solo gli elementi indicati.
Si suppone che i file non indicati siano privi di errori, di conseguenza non vengono creati dal log. Pertanto, quando si ripristina un backup del log che include un'operazione di aggiunta di file, è necessario specificare il nome del file aggiunto nell'istruzione RESTORE.
Nella restante parte di questo argomento viene descritta la procedura per l'identificazione dei file che includono operazioni di aggiunta di file e l'impostazione della ricreazione automatica di questi file durante la sequenza di ripristino.
Identificazione del file di log che include un'operazione di aggiunta di file
È possibile identificare il file di log che include un'operazione di aggiunta di file nei modi seguenti:
È possibile utilizzare l'LSN di creazione del file (create_lsn). Questo numero è disponibile in entrambe le viste del catalogo sys.database_files e sys.master_files.
È possibile ottenere informazioni sul contenuto del file dalle tabelle di cronologia di backup in msdb oppure utilizzando RESTORE FILELISTONLY. Per ulteriori informazioni, vedere RESTORE FILELISTONLY (Transact-SQL).
Ripristino di file o di pagine senza un backup completo
È possibile specificare un elenco di file, di pagine o un filegroup in un log o in un ripristino differenziale. Questa funzionalità consente di ripristinare file o pagine per cui non esiste un backup completo del database. Il ripristino di un file o una pagina da un backup differenziale o del log rappresenta un'eccezione alla regola in base alla quale una sequenza di ripristino deve iniziare con un backup completo.
Di seguito è riportata la sintassi di base necessaria per eseguire il ripristino da un backup differenziale del file:
RESTORE DATABASE database_name <file_filegroup_page_list> FROM <differential backup>
Di seguito è riportata la sintassi di base necessaria per eseguire il ripristino da un backup del log:
RESTORE LOG database_name <file_filegroup_page_list> FROM <log backup>
Vedere anche