Negli ultimi articoli abbiamo parlato ampiamente del backup di database sul sistema Sql Server, mettendo assieme una guida suddivisa in quattro parti. Lo scopo finale del nostro percorso era quello di pianificare ed automatizzare i backup dei database anche sulle versioni Express di Sql Server (gratuite), le quali non prevedendo il servizio Sql Server Agent erano limitate sotto questo punto di vista.
Anche se fortemente legato alla guida al Backup su Sql Server dei precedenti articoli, ho voluto appositamente dedicare un'articolo a parte per la realizzazione dello script per il backup, primo perchè andremo ad introdurre alcuni concetti nuovi (come l'utility SQLCMD) e in secondo per separare nettamente la parte teorica della guida e quella pratica per l'implementazione dello script per il backup spiegato in questo articolo.
Lo script di backup che andremo a realizzare, sfrutta le conoscenze acquisite nei precedenti quattro articoli intitolati "Guida al backup di database con Sql Server".
Gli strumenti di cui abbiamo bisogno per realizzare tutto ciò sono:
- un'istruzione Transact-SQL
- l'utility SQLCMD dell'ambiente di Sql Server
- un file di batch
- le operazioni pianificate di Windows
Non allarmatevi! analizziamo con calma questi quattro punti e, al termine dell'articolo vedrete come sia stato facile mettere appunto il nostro script per pianificare il backup, scavalcando così l'uso del servizio Sql Server Agent non presente nelle versioni Express.
L'istruzione Transact-SQL per il backup
Per realizzare il nostro script, per prima cosa ci serve una istruzione Transact-SQL per dire a Sql Server quale tipo di backup fare e per quale database. Concentriamoci su un backup di database completo su disco (e non su nastro), prevedendo una sovrascrittura ed una verifica al termine della stessa. Apriamo allora il nostro Sql Server Management Studio e creiamo una nuova query, l'istruzione SQL che andremo a scrivere sarà del tipo:
BACKUP DATABASE [nome_databse] TO device_backup_db WITH INIT, NAME = 'nome_database backup’, DESC = ’Backup nome_database - Completo con sovrascrittura', SKIP, CHECKSUM;
L'istruzione prevede le opzioni INIT e SKIP, rispettivamente usate per sovrascrivere il backup esistente e per disabilitare la scadenza del set di backup. Inoltre si specifica un nome ed una descrizione (opzionali), ed infine è previsto il comando CHECKSUM per la verifica. Ovviamente bisogna sostituire il nome del proprio database e del proprio dispositivo di backup, e per le stringhe nome e descrizione specificare i contenuti appropriati.
Testiamo che la nostra query sia perfettamente funzionante e salviamola in una cartella apposita, ad es. sotto: "C:\SCRIPT_BACKUP\Query_Backup.slq"
Per chi volesse approfondire le istruzioni Transact-SQL per il backup può leggere il precedente articolo: "Guida al backup di database con Sql Server - 4° parte"
Per chi volesse approfondire l'uso del backup manuale tramite Sql Server Management Studio può leggere l'articolo: "Guida al backup di database con Sql Server - 3° parte"
NOTA: per effettuare il backup di più di un database su device differenti, possiamo ripetere l'istruzione sql specificando i nomi dei diversi db. Ogni istruzione deve essere terminata dal punto e virgola e quella successiva cominciare con la parola chiave GO, che dà inizio alla nuova istruzione sql una volta che quella precedente è terminata.
L'utility SQLCMD
La nostra query per il backup è pronta, ma come facciamo a lanciarla senza richiamarla da Sql Server Management Studio? In questo caso ci viene in aiuto l'utility SQLCMD dell'ambiente di Sql Server. L'utility SQLCMD presente dalla versione 2005 di Sql Server in poi, permette di lanciare le istruzioni Transact-SQL (ma anche system procedure e script sql) dalla riga di comando, la sua sintassi è:
sqlcmq {opzioni} [SERVER] {opzioni} [istruzione Transact-SQL / file.sql]
Quindi aprendo il prompt dei comandi, posizioniamoci sulla directory in cui abbiamo salvato la query di backup precedente e sfruttando sqlcmd scriviamo il comando:
SQLCMD -S [nome_server\nome_istanza] -i Query_Backup.slq
Analizziamo il comando, innanzitutto SQLCMD serve per richiamare l'utility, subito dopo troviamo l'opzione -S che serve per specificare il nome del server (basta un "." se è su server locale, come ".\nome_istanza") che può essere locale o su un altro computer in rete; dopodichè troviamo l'opzione -i che ci permette di specificare un file .sql che vogliamo venga eseguito anzichè scrivere direttamente l'istruzione sql sulla riga di comando, ed infine specifichiamo la query precedentemente salvata.
Anche questa volta testiamo che tutto sia in ordine, accertandoci di ottenere lo stesso risultato di backup eseguito lanciando la query d Sql Server Management Studio.
Il file di bacth per automatizzare l'istruzione sqlcmd del backup
A questo punto siamo nelle condizioni di lanciare la nostra query di backup direttamente dall'ambiente del Sistema Operativo (per l'esattezza da DOS), come fare quindi per automatizzare questa istruzione ed evitare di doverla riscrivere ogni volta al prompt dei comandi? Niente di più semplice, usiamo i cari e vecchi file batch, copiamo dunque su un file di testo l'istruzione con SQLCMD e salviamolo con estenzione .bat o .cmd (da Win NT in poi), spostiamo il file nella stessa directory in cui abbiamo salvato l'istruzione SQL per il backup
Le operazioni pianificate di Windows per pianificare il backup
Bene, il più ormai è fatto, avendo il file batch contenente al suo interno il comando SQLCMD per chiamare la query di backup, non ci resta che richiamarlo ogni qual volta ne abbiamo bisogno. Per pianificare questa operazione, possiamo avvalerci benissimo delle operazioni panificate di Windows, andiamo quindi sul pannello di controllo e richiamiamo le operazioni pianificate, si aprirà il wizard che ci guiderà passo passo nella messa appunto dell'operazione da pianificare, per i programmi da eseguire selezioniamo tramite il tasto sfoglia il file bacth che abbiamo preparato, dopodichè impostiamo i giorni e le ore in cui vogliamo che venga ripetuta l'operazione.
Sia dei file di batch che delle operazioni pianificate, ne abbiamo parlato nell'articolo: "Pianificare lo spegnimento del PC"
Eccoci così giunti al termine della realizzazione del nostro script, ho preparato un file zip contenente sia la query che il file batch, ovviamente devono essere entrambi aperti e corretti con i propri dati per poter funzionare correttamente, lo potete scaricare da qui: SCRIP-BACKUP-SQLSERVER.zip (665,00 bytes)
Per chi volesse approfondire l'intero argomento può leggere i post:
Lo script fin qui illustrato è utile ma non può di certo coprire ogni singola esigenza, quello che si voleva mettere in evidenza era la tecnica con cui aggirare la limitazione della versione Express di Sql Server che non permette di pianificare un backup di database poichè sprovvisto del servizio Sql Server Agent. Ognuno può personalizzare lo script come meglio crede, la migliore gratificazione per me sarà leggere i vostri commenti. Per qualsiasi dubbio, suggerimento o rettifica, non esitate a commentare sarò lieto assieme a voi di approfondire ulteriorermente l'argomento.