Uno script per pianificare il backup su Sql Server Express senza l'uso del servizio Sql Server Agent

Giorgio Borelli

Sql Server pianificare il backup di database con uno script Transact-SQLNegli 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. 

Categorie: database | Sql Server

Tags: , , , , , ,

Commenti (12) -

Ottima l'idea di utilizzare le operazioni pianificate di windows per aggirare la mancanza di Sql Server Agent nella versione Express di Sql Server.
Le operazioni pianificate sono oqualcosa che ho sempre considerato di scarsa utilità, invece mi hai fatto scoprire un ottimo modo per usarle.
Grazie!

Rispondi

Grazie, felice davvero che ti sia stato d'aiuto. In merito alle operazioni pianificate devo confessarti che anche io la pensavo come te alcuni anni di esperienza in meno fà Laughing ... invece hanno il loro perchè, e possono tornare utili in tante altre circostanze.

Rispondi

Ciao,
anch'io utilizzavo il tuo metodo solamente che qualche collega aggiungeva un db e si dimenticava di andare a modificare lo script di backup...
Ho creato uno script in vbs sempre pianificato con le operazioni pianificate che al suo avvio controlla la lista dei backup e esegue il backup di tutti.
Lo puoi trovare al link consulentiit.wordpress.com/.../ ‎.

Rispondi

Ciao Paolo,
e grazie per aver condiviso il link del tuo script per il backup su SQL Server, ho dato un'occhiata e sembra davvero utile ed interessante.
Ti chiedo se funziona anche in rete, ovvero se l'istanza di Sql Server si trova su un server in LAN, basta settare il percorso di rete dell'istanza per farlo andare, oppure devi considerare anche gli eventuali permessi di accesso al server? Inoltre t'invito a pubblicare anche lo script per il ripristino dei DB di cui parli, sarebbe davvero utile avere lo script completo.

Rispondi

Ciao,
non ho mai provato ad eseguirlo via rete...quando ho un attimo lo provo e se non funziona lo adatto in modo da farlo funzionare.
Per lo script sul ripristino in settimana provvedo a pubblicarlo,
ti farò avere il link appesa sarà online.

Rispondi

Ottimo Paolo,
attendiamo allora il tuo script completo, se và anche in LAN potrebbe essere una soluzione davvero efficace per il backup su Sql Server Express, se poi aggiungi anche il ripristino dei DB non ci resterebbe che ringraziarti.

Aspettiamo allora... ciao.

Rispondi

massimiliano guiggi
Italy massimiliano guiggi says:

ciao, ottima guida, l'avessi trovata a suo tempo mi avrebbe fatto molto comodo in quanto eseguo i backup così come da te descritto da alcuni anni , ma il problema che ho è con la pianificazione di windows 7. Non partono i file .bat. E' possibile o accadxe solo a me??? grazie

Rispondi

Giorgio Borelli
Italy Giorgio Borelli says:

Ciao Massimiliano,
prova a creare un file .cmd anzichè .bat

I file batch (.bat) nacquero per le architetture a 16bit mentre i .cmd per quelle a 32bit, quindi da Windows NT in poi.
Sebbene i .bat dovrebbero essere eseguibili su qualsiasi sistema, i .cmd sono più adatti ad un recente Windows Seven, il resto è uguale.

Fai questa prova nominando l'estensione del file batch in .cmd, e vedi se và, eventualmente se ci dovessero essere ancora problemi, riposta e indagheremo ulteriormente.

Saluti Giorgio ;).

Rispondi

Massimiliano
Italy Massimiliano says:

niente da fare anche in rete tanti che chiedono la solita cosa e nessuna risposta... tranne questa: social.technet.microsoft.com/.../be366fc7-d5fa-4575-9385-7c0d3bd04f8e che però non capisco... ma qualcuno usa già con profitto e consiglia qualche programmino semplice semplice al quale affidare questi .bat ed evitare operazioni pianificate di windows 7?

Rispondi

Giorgio Borelli
Italy Giorgio Borelli says:

Scusa Massimiliano,
ma riesci ad eseguire una qualsiasi operazione pianificat su Windows Seven, che sò, a lanciare un eseguibile ad esempio.

Fammi sapere, Giorgio.

Rispondi

Massimiliano
Italy Massimiliano says:

ok ho risolto
il problema era che nel .bat
vanno scritti i path assoluti
altrimenti dalle operazioni pianif
partono ma non fanno che devono fare

Rispondi

Giorgio Borelli
Italy Giorgio Borelli says:

Grande, perfetto,
la tua esperienza sicuramente può tornare utile ad altri, grazie per averla condivisa, alla prossima.

Rispondi

Aggiungi Commento

biuquote
Loading