Esecuzione di backup di database di sola lettura

In questo argomento vengono illustrati alcuni aspetti correlati al backup di database che sono attualmente di sola lettura oppure che erano di sola lettura al momento dell'ultimo backup.

Nel caso di un database di sola lettura, il file primario non può essere aggiornato durante l'esecuzione di un backup. La procedura consigliata per un database di questo tipo prevede l'esecuzione di un backup completo. Se, tuttavia, per un database viene impostata alternativamente l'autorizzazione di sola lettura e di lettura/scrittura, può essere utile eseguire il backup quando il database è di lettura/scrittura. Fino a quando viene mantenuta l'autorizzazione di lettura/scrittura per il database, se le modifiche apportate hanno estensione limitata, è quindi possibile eseguire backup differenziali.

Nota

Non è possibile modificare la proprietà IsReadOnly di un filegroup durante un backup. Se si tenta di apportare una modifica di questo tipo, verrà generato un errore e l'operazione avrà esito negativo.

Backup parziali dopo l'impostazione dell'autorizzazione di lettura/scrittura per un database

Il backup parziale di un database di sola lettura contiene esclusivamente il filegroup primario. Se il database successivamente diventa di lettura/scrittura, potrebbero essere presenti filegroup secondari di lettura/scrittura non inclusi nel backup parziale. In questo caso, se si tenta di eseguire un backup parziale differenziale, l'operazione avrà esito negativo. Prima di poter eseguire un backup parziale differenziale del database, è necessario eseguire un altro backup parziale. Il nuovo backup parziale include tutti i filegroup secondari di lettura/scrittura e può fungere da base per backup parziali differenziali.

Backup differenziali di database di sola lettura

Per i database di sola lettura, i backup completi sono più semplici da gestire quando vengono utilizzati singolarmente anziché in combinazione con i backup differenziali. Quando un database è di sola lettura, il backup e le altre operazioni non sono in grado di modificare i metadati inclusi nel file. I metadati necessari per un backup differenziale, ad esempio il numero di sequenza del file di log in corrispondenza del quale il backup differenziale ha inizio (l'LSN di base del backup differenziale), vengono pertanto archiviati nel database master. Se la base differenziale viene creata quando il database è di sola lettura, la mappa di bit differenziale indicherà un numero maggiore di modifiche rispetto a quelle effettivamente apportate dopo il backup di base. I dati aggiuntivi vengono letti dal backup, ma non vengono scritti nel backup, perché viene utilizzato il valore differential_base_lsn archiviato nella tabella di sistema backupset per determinare se i dati sono realmente cambiati dopo la base.

Quando viene ricostruito, ripristinato oppure scollegato e collegato un database di sola lettura, le informazioni relative alla base differenziale vengono perse perché il database master non è sincronizzato con il database utente. Il Motore di database di SQL Server non è in grado di rilevare né evitare questo problema. Gli eventuali backup differenziali successivi non saranno basati sul backup completo più recente e potrebbero generare risultati imprevisti. Per creare una nuova base differenziale, è consigliabile eseguire un backup completo del database.

Procedure consigliate per l'utilizzo di backup differenziali con un database di sola lettura

Dopo la creazione di un backup completo di un database di sola lettura, se si desidera creare un successivo backup differenziale, eseguire il backup del database master.

In caso di perdita del database master, ripristinarlo prima dei backup differenziali di un database utente.

Se si scollega e collega un database di sola lettura per il quale in seguito si desidera utilizzare backup differenziali, eseguire non appena possibile un backup completo sia del database di sola lettura sia del database master.