Uno dei task più frequenti nella manutenzione dei database (nel caso SQL Server) è quello di effettuarne lo Shrink (a riguardo, suggerisco di leggere il commento lasciato da Davide Mauri) ed il BackUp. Finchè le operazioni riguardano un solo database possiamo completare il task utilizzando, ad esempio, SQL Server Management Studio. Nel caso in cui le suddette operazioni debbano essere effettuate su più database la "faccenda si complica" (più che altro diventa ripetitiva) e possiamo
risolvere il problema creando un package SSIS (SQL Server Integration Services). Premetto che googlando si possono trovare diverse soluzioni, utilizzando anche lo stesso sistema. Per iniziare, apriamo Visual Studio (2008 Professional nel mio caso) e partiamo con il creare un nuovo progetto "Integration Services Project" (ovviamente per visualizzare questo template è necessario che tutti i componenti relativi siano correttamente installati e configurati)
Creiamo una nuova connessione al server sql interessato nel "Connection Managers" (tasto destro->"New OLE DB Connection...")
Se si vuole, dopo la creazione della connessione è sempre possibile rinominare la stessa.
A questo punto, nel "Control Flow" non ci resta che trascinare due Task presenti nel Tab
"Maintenance Plan Tasks" della Toolbox, in particolare "Shrink Database Task" e "Back Up Database Task". Per impostare le opzioni ed i database su cui eseguire le operazioni è sufficiente un doppio click sui task aggiunti. Ad esempio cliccando due volte su "Shrink Database Task", otteniamo:
Effettuiamo la stessa operazione sul task relativo al BackUp. A questo punto abbiamo quasi terminato, ma vogliamo che al completamento delle operazioni venga inviata all'amministratore una e-mail di notifica. Potremmo utilizzare "Send Mail Task", ma ha delle limitazioni (tra lequali non è possibile specificare le credenziali d'accesso al server SMTP, ma utilizza l'autenticazione di Windows), per questo, aggiungiamo uno "Script Task" nel nostro "Data Flow". Solito doppio click, e nella finestra visualizzata premiamo
sul bottone con la dicitura "Edit Script...".
Verrà visualizzata una finestra di Visual Studio in cui possiamo scrivere il codice (C#) per l'invio dell'e-mail. Per chi è abituato ad usare Visual Basic, nella finestra delle proprietà del Task è possibile scegliere quale linguaggio utilizzare (nota: nella versione 2005 non era possibile scegliere tra i due linguaggi). Prima di iniziare a scrivere è necessario aggiungere un riferimento all'assembly System.Net.dll al progetto. Scriviamo del codice simile al seguente:
1: System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
2: message.From = new System.Net.Mail.MailAddress("indirizzo@dominio.it");
3: message.To.Add (new System.Net.Mail.MailAddress("amministratore@dominio.it"));
4: message.Body =string.Format ("BackUp dei database completato ({0:d})",DateTime.Now );
5: message.Subject ="Backup";
6:
7: try
8: {
9: System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.dominio.it");
10: smtp.Credentials = new NetworkCredential("username", "password");
11: smtp.Send(message);
12:
13: Dts.TaskResult = (int)ScriptResults.Success;
14: }
15: catch (Exception ex)
16: {
17: Dts.Log(ex.Message, 123, null);
18: Dts.TaskResult = (int)ScriptResults.Failure;
19: }
Tramite un costrutto Try...Catch catturiamo eventuali eccezioni ed indichiamo il successo o il fallimento del task.
Ogni volta che abbiamo la necessità di utilizzare questo Package, non è necessario aprire un'istanza di Visual Studio, ma è possibile utilizzare l'utility "DTExec.exe" da riga di comando (ad esempio, DTExec.exe /FILE "package.dtsx". (E' possibile trovare il package nella directory "bin" del progetto)
Technorati Tag:
SSIS,
Backup,
Shrink