Abbiamo visto in un articolo precedente "Le cause più comuni di perdita dei dati" quanto sia importante effettuare il backup dei propri dati, che il più delle volte permette di evitare delle vere e proprie catastrofi informatiche, desidero così approfondire l'argomento parlando nello specifico del backup di database con Microsoft Sql Server, uno dei database server più potenti e diffusi sul mercato.
Vista l'ampiezza dell'argomento ho deciso di suddividere questa guida al backup in quattro parti, concludendola con un ottimo script che ci permetterà di automatizzare il backup con SQL Server.
Innanzi tutto diciamo che il backup di database è una procedura per archiviare (in maniera precauzionale) i database in un modo strutturato tale da permettere un facile recupero in caso di necessità. SQL Server distingue tra backup statico e dinamico, il secondo permette di effettuare il backup di database anche mentre gli utenti stanno lavorando sull'applicativo che sfrutta il database.
Passiamo adesso a descrivere le quattro tipologie di backup che SQL Server mette a disposizione:
- backup di database completo
- backup di database differenziale
- backup del log di transazioni
- backup dei file di database
Backup di database completo
Questo tipo di backup prevede la copia dei dati e di tutte le strutture del database (schema delle tabelle, viste, store procedure, pagine di database, etc. etc.), in poche parole l'intero database comprensivo anche delle transazioni non terminate se il backup è di tipo dinamico. Importante precisare che qualunque sia la metodologia di backup che si vuole adottare, il primo backup da effettuare è quello completo, poichè tutti i backup descritti successivamente si appogiano su una copia di backup di database completo.
Backup di database differenziale
con questa tipologia di backup vengono salvate solo quelle parti del database modificate dall'ultimo backup di database completo, la caratteristica di questo backup è sicuramente la maggiore velocità rispetto a quello completo poichè la quantità di dati da salvare è minore. Se le dimensioni del database della vostra applicazione comincia a farsi considerevole, capite bene che il tempo e lo spazio impiegato per effettuare un backup di database differenziale risulta di gran lunga inferiore rispetto a quello completo. Anche in questo caso le transazioni sospese vengono anch'esse archiviate se SQL Server è impostato su un backup dinamico.
Backup del log di transazioni
Diciamo innanzitutto cos'è un log di transazioni, sono un'insieme di file (uno o più di uno) che Sql Server usa per registrare tutti i record dei dati prima e dopo ogni transazione, Sql Server sfrutta così il log di transazioni per effettuare un recupero dall'ultima transazione nel caso qualcosa vada storta riportando in questo modo il database ad uno stato coerente.
Quindi un backup del log di transazioni non fà altro che archiviare le modifiche registrate nel file di log, di fatto non si salvano alcune parti fisiche del database ma solo le operazioni che coinvolgono le modifiche dei record presenti nel file di log.
Anche in questo caso la velocità di backup è superiore al backup completo ed anche di quello differenziale, poichè si và a salvare solo le operazioni logiche delle varie transazioni tra un backup e l'altro. Stesso discorso non possiamo dire per il recupero, che è più veloce con quello differenziale, poichè mentre per un recupero completo del database basterebbe un backup completo e l'ultimo backup differenziale, usando i backup dei log di transazioni invece bisogna eseguire il recovery del database completo ed il recovery di tutte le sequenze di backup delle varie transazioni dall'inizio del primo backup. Un'ulteriore considerazione però è quella che con il backup del log di transazioni durante il recupero possiamo però risalire ad un determinato stato del database cosa che non possiamo fare con quello differenziale poichè contiene solo le ultime modifiche.
NOTA: facciamo attenzione al log di transazioni, poichè se esso si riempie (diventa troppo grande) Sql Server blocca l'esecuzione di qualsiasi altra transazione. Possiamo o disabilitare la scrittura del log (cosa che sconsiglio) o effettuare dei backup del log che permettono così di svuotarlo di tutte quelle transazioni che vengono salvate correttamente liberando spazio sul file di log. Infine è utile dire pure che non è possibile effettuare il backup del log di transazioni sullo stesso file in cui è memorizzato il database, poichè se questo risultasse danneggiato non permetterebbe più di recuperare il log e ripristinare tutte le modifiche dall'ultimo backup.
Backup dei file di database
Il backup di file consente di selezionare uno o più file (o filegroup) del database ed effettuarne il backup. Tale tipo di backup è particolarmente consigliato per database veramente di grandi dimensioni, dove il tempo per un backup completo risulterebbe eccessivo. Per il recupero necessità comunque del log di transazioni.