Condividi tramite


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>