giovedì 7 marzo 2013

Schedulare backup automatici SQL SEVER 2005 EXPRESS


SQL SERVER 2005, WINDOWS SERVER 2003, OPERAZIONI PIANIFICATE , WINRAR









Oggi vedremo come schedulare dei backup automatici per sqlserver2005 versione express.
Questo automatismo si realizzerà senza neanche una linea di codice, contrariamente a quanto pensavo
io prima di iniziare :)

PASSI OPERATIVI:

1) abilitare sql server ad effettuare le chiamate di sistema
2) creare una lista di database da ' backuppare '
3) creare Stored Procedure che effettua tutto lo sporco lavoro
4) creare un'operazione pianificata che lanci la Stored descritta al punto precedente.










PASSO NUMERO 1
di seguito lo script da lanciare nella console di sqlserver 2005 ManagementStudio.

-- Questo comando abilita le opzioni avanzate, senza questo non funzionerà il 
-- comando successivo.
EXEC sp_configure 'show advanced options', 1
GO
--Per effettuare un refresh del sistema .
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO



PASSO NUMERO 2
questo il contenuto del file di testo in cui si inseriscono i nomi database da backappare
nome file : scheduledbackup.sql
sp_BackupDatabase 'prjNOMEDB1', 'F'
GO
sp_BackupDatabase 'prjNOMEDB2', 'F'
GO
--sp_BackupDatabase 'prjNOMEDB3', 'F'
--GO
QUIT



PASSO NUMERO 3

definizione della stored procedure che effettua il backup, nella cartella 
c:\scheduledbackup\DATA\NOMEDATABASE.bak
In verità ho scritto questo script affinchè si possano effettuare il backup completo ( parametro F) 
il backup differenziale ('D') e quello del log ('L') quindi in funzione del parametro la parte finale del nome sarà
leggermente differente.


USE [master] 
GO 
/****** Object:  StoredProcedure [dbo].[sp_BackupDatabase]    Script Date: 07/03/2013 11:40:47 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 


-- ============================================= 
-- Author: Aldo Panetta   
-- Create date: 2013-03-07 
-- Description: Backup Database 
-- Parameter1: databaseName 
-- Parameter2: backupType F=full, D=differential, L=log
-- ============================================= 
CREATE/ALTER PROCEDURE [dbo].[sp_BackupDatabase]  
       @databaseName sysname,
       @backupType CHAR(1) 
AS 
BEGIN 
       SET NOCOUNT ON; 

       DECLARE @sqlCommand NVARCHAR(1000) 
       DECLARE @dateTime NVARCHAR(20) 
       DECLARE @comandoZip  NVARCHAR(1000)
       SELECT @dateTime = REPLACE(CONVERT(VARCHAR, GETDATE(),111),'/','_')
         DECLARE @path NVARCHAR(1000) 
         SELECT @path  = 'C:\ScheduledBackup\'+@dateTime+'\' 
         EXEC master.dbo.xp_create_subdir @path
        
       IF @backupType = 'F' 
             BEGIN 
                SET @sqlCommand = 'BACKUP DATABASE ' + @databaseName + 
                    ' TO DISK = ''C:\ScheduledBackup\'+@dateTime+'\' +      @databaseName + '_Full_'   + '.BAK''' 
                SET @comandoZip=  @databaseName + '_Full_'   + '.BAK'
             END
        
       IF @backupType = 'D' 
               BEGIN
                  SET @sqlCommand = 'BACKUP DATABASE ' + @databaseName + 
                  ' TO DISK = ''C:\ScheduledBackup\' +@dateTime+'\'+ @databaseName + '_Diff_'  + '.BAK'' WITH DIFFERENTIAL'
                            
                  SET @comandoZip=  @databaseName + '_Diff_'  + '.BAK'
               END
        
       IF @backupType = 'L' 
               BEGIN
                  SET @sqlCommand = 'BACKUP LOG ' + @databaseName + 
                  ' TO DISK = ''C:\ScheduledBackup\'+@dateTime+'\' + @databaseName + '_Log_'   + '.TRN''' 
                  SET @comandoZip=   @databaseName + '_Log_'   + '.TRN'
                     END   
       EXECUTE sp_executesql @sqlCommand 
       DECLARE @comm NVARCHAR(1000) 
       SET @comm= 'c:\programmi\winrar\rar.exe a -t -df'+ ' '+ 'C:\ScheduledBackup\'+@dateTime+'\'   +@comandoZip+'.rfile ' + 'C:\ScheduledBackup\'+@dateTime+'\' +@comandoZip

         EXEC master.dbo.xp_cmdshell  @comm
END

NOTA: questo script dopo aver effettuato il backup invocherà rar.exe per comprimere il file e, attraverso i parametri -t -df effettuerà prima la verifica poi la cancellazione del file .bak,
il file zippato risultante avrà estensione .rfile, estensione fittizia aggiunta perchè altrimenti avrei dovuto modificare la variabile @comandoZip, e non ne avevo voglia, ( se volete farlo voi dovreste eliminare l'estensione .bak dalla prima occorrenza della variabile @comandoZip e non nella seconda)



PASSO 4, OPERAZIONE SCHEDULATA
Foto gallery che vi illustra i passaggi da seguire per la creazione dell'operazione schedulata


Dopo aver creato l'operazione pianificatam si apre in modifica e si aggiunge al file sqlcmd.exe nella finestrella esegui i seguenti parametri:



.....\sqlcmd -S serverName -E -i C:\scheduledbackup\scheduledbackup.sql
dove 
  • sqlcmd ( sql command :) )
  • -S (specifica nomemacchina\nomeistanza )
  • serverName (nome macchina .... :))
  • -E (consente di effettuare le trusted connection, ovvero con le credenziali di sistema operativo e non con accesso sql)
  • -i (specifica che si passa come input un file)
  • C:\scheduledbackup\scheduledbackup.sql (questo è il file che contiene i nomi di database, visto al punto 1 o 2 non ricordo)




THE END!!!
mi raccomando cliccate sulla mia pubblicità  :) 

Nessun commento:

Posta un commento