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.
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.
-- 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
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.
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)
@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
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