Backup Pianificato con SQL Server 2005 Express SQL Server Express, al contrario delle versioni a pagamento più complete di SQL Server, non dispone del servizio di Agent. Questo comporta che, nativamente, non è possibile schedulare nessuna attività amministrativa che desideriamo eseguire al suo interno, compresi i Backup e il ricalcolo di indici e statistiche. Per supplire a questa mancanza ci vengono in contro due strumenti da usare in un'unica soluzione: - Lo schedulatore di Windows - L'utility a riga di comando SQLCMD.exe, presente in tutte le versioni di SQL Server 2005 (nuova versione del vecchio OSQL.EXE di SQL Server 2000) Nel nostro esempio scheduleremo il backup quotidiano di uno userdb all'1:00 AM. La nostra soluzione per la schedulazione automatizzata sarà composta quindi da: - Un file backup.sql, contenente le istruzioni sql che vorremo andare ad eseguire - Un file backupSQL.bat, contenente la chiamata a SQLCMD per eseguire tutto il codice contenuto nel file .sql. - Una nuova schedulazione negli scheduled tasks Ecco la procedura: 1) Creiamo il file backup.sql. Questo conterrà il seguente codice: BACKUP DATABASE [MioUserDB] TO DISK = N'D:\BackupSQL\[MioUserDB]' WITH NOFORMAT, INIT, NAME = N'Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO (nota: vi rimando ai books online di sql per i dettagli sui parametri dell'istruzione BACKUP DATABASE) 2) Creiamo il file backupSQL.bat. Questo conterrà il seguente codice: @ECHO OFF ECHO Inizio backup SQL... SQLCMD -S [Nome istanza] -U [utente] -P [password] -i "backup.sql" -o "backupSQL.log" ECHO Fine backup 3) Mettiamo entrambi i file nella stessa cartella e andiamo a creare il task schedulato sotto windows - Pulsante Start->Accessori->Utilità di sistema->Operazioni Pianificate - Creiamo il nuovo task schedulato e indichiamogli di eseguire il file backup.bat ogni giorno all'una del mattino. La procedura è semplice e completamente guidata. Giornalmente troveremo nel file backupSQL.log il rapporto dell'attività eseguita. NOTE: Nello script, in questo esempio, abbiamo inserito le credenziali dell'utente che deve accedere a SQL. Per ragioni di sicureza potremmo voler nascondere queste informazioni: è possibie farlo usando un'utenza di windows per l'accesso a SQL (usando l'opzione -E su SQLCMD al posto di -U e -P) e inserendo le relative credenziali solo nello scheduler di windows. Buon lavoro.