Backup database (Parte I)
In questo tutorial andremo ad analizzare i backup in unadatabase SQL Server 2005.
Innanzitutto, cos'è un backup: si tratta di unacopia del database strutturata in modo tale dapermettere il recupero dei dati in esso contenuti inqualsiasi momento
Modelli di recupero:
Prima di lavorare con un backup, è necessario definireche modello di recupero si vuol seguire. SQL Server 2005mette a disposizione tre modelli:
- Simple - è il recupero semplice, nel quale non viene copiato il log della transaction, ed è dunque possibile recuperare unicamente i più recenti backup
- Full - vengono copiati sia i dati nel database che il log della transaction, così che si possa recuperare il database in ogni momento
- Bulk Logged - molte transaction vengono salvate nel log delle traslaction, mentre alcune operazioni Bulk vengono tralasciate
Le più utilizzate sono le prime duepossibilità; generalmente, si usa il Simple nel casoin cui non ci siano problemi a perdere i dati salvatidall' ultimo backup completo (spesso usato per i databasesecondari, che non sono parte vitale dell' applicazione);si usa invece il Full nel caso in cui ciascun bit di dati siadi vitale importanza per il funzionamento dell'applicazione.
Lavorare con il recupero Simple:
Vediamo come strutturare lo script di backup nel caso si suascelta la modalità di recupero Simple, per un databasepiccolo o medio. Ecco come impostarlo:
ALTER DATABASE AdventureWorks SET RECOVERY SIMPLE
La strategia più semplice per ottenere un backupè l' avviare il comando SQL seguente, che esegueun backup completo del db, ad intervalli regolari:
BACKUP DATABASE AdventureWorks
TO DISK = 'C:BackupsAdventureWorks.BAK'
Ma SQL Server 2005 ci mette anche a disposizione il SQLServer Management Studio, che semplifica le cose. Noiperò vogliamo capire, non eseguire...quindiaccantoniamo il Management Studio.
Backups Copy-only:
Normalmente i backup effettuati vengono poi utilizzati dalserver SQL come base differenziale per trovare le modificheapportate al database dall' ultimo backup. Nel casoperò in cui i backup sia volto a creare una copia dautilizzare per uno scopo preciso, senza volere che vada adinfluenzare il database, SQL Server 2005 ci mette adisposizione l' attributo COPY_ONLY
BACKUP DATABASE AdventureWorks TO DISK = 'C:BackupsAdventureWorks.bak' WITH COPY_ONLY;
Backups Differenziali:
Pensiamo di dover trattare con un database molto grande, adesempio di 100 GB. Un backup di 100 GB richia di rallentaremolto il database, mentre l' operazione di copia èin corso...E supponiamo anche che sia necessario eseguire unbackup a settimana del database: significherebbe un ora asettimana in cui il database rallenta notevolmente. Questofastidioso inconveniente può essere scongiurato grazieai backups differenziali (differential backups), che eseguonola copia solo dei dati e elle parti del database che sonostati modificati dopo l' ultimo full backup deldatabase.
Per iniziare un backup differenziale, ecco il codice:
BACKUP DATABASE AdventureWorks TO DISK = 'C:ackupsAdventureWorks.bak' WITH DIFFERENTIAL;
E se volessimo recuperare il database? Dovremmo dapprimarecuperare il full backup ed in seguito recuperare uno dopol' altro i backups differenziali.
Nel caso si provi ad eseguire il comando sopra riportato, sipotrà notare che non abbiamo cambiato ogni volta ilnome del file di backup. Non è sbagliato, in quantoSQL Server 2005, in casi di omonimia come questi,aggiunge semplicemente i pezzi mancanti al vecchio backup,diminuendo il tempo necessario alla copia completa.
Nel caso invece in cui si voglia sovrascrivere un fileesistente, ecco il codice:
BACKUP DATABASE Adventureworks TO DISK = 'C:ackupsAdventureWorks.bak' WITH INIT;
Infine, per accertarci, in termini di accessibilità,dell' integrità del file di backup appena creato,ecco cosa scrivere:
RESTORE VERIFYONLY FROM DISK = 'C:ackupsAdventureworks.bak'
- Articolo precedente Prestazioni: migliorare problemi di lentezza di un database
- Articolo successivo Backup database (Parte II)