DevAdmin Blog

Blog di Ermanno Goletto (Microsoft MVP Directory Services - MCITP - MCTS - MCSA - MCP)
posts - 853, comments - 419, trackbacks - 13

My Links

News

Avatar

Curriculum Vitae

Visualizza il profilo di Ermanno Goletto su LinkedIn


Il contenuto di questo blog e di ciascun post viene fornito “così come é”, senza garanzie, e non conferisce alcun diritto. Questo blog riporta il mio personale pensiero che non riflette necessariamente il pensiero del mio datore di lavoro.

Logo Creative Commons Deed


Logo SysAdmin.it SysAdmin.it Staff


Logo TechNet Forum TechNet Italia @ForumTechNetIt Follow TechNet Forum on Twitter


Logo MVP


Ermanno Goletto Follow ermannog on Twitter

Article Categories

Archives

Post Categories

Blogs

Friends

Knowledge Base

MVP Sites

Resources

Schedulare un Backup in SQL Server Express 2005

Poichè SQL Server Express non ha il SQL Agent non è possibile schedulare internamente a SQL Server dei processi quali ad esempio il Backup. E' possibile aggirare l'ostacolo utilizzando 3 diversi metodi:

  • Creando uno script per eseguire il Backup da eseguire tramite un Bat utilizzando il tool a riga di comando SQLCMD ed avviando il Bat tramite le operazioni pianificate.
  • Creando uno script WSH e avviandolo tramite le operazioni pianificate.
  • Creando un'applicativo basato sul .NET Framework 2.0, ad esempio in VB.Net, mediante l'utilizzo delle librerie Microsoft.SqlServer.Smo.dll e Microsoft.SqlServer.ConnectionInfo.dll

Ovviamente questa tecnica può anche essere adattata per eseguire altre operazioni come ad esempio lo Skrink del database o di file.

Sommario

Metodo 1

Creazione di uno script di backup

Tramite SQL Server Management Studio avviamo un task per l'esecuzione di un Backup del database sul file C:\Backup\MyDB.bak e dopo aver impostato le opzioni in base alle nostre esigenze salviamo il task sul file C:\Backup\BkpMyDB.sql invece di eseguirlo ottenendo uno script di questo tipo:

BACKUP DATABASE [MyDB] TO DISK = N'C:\Backup\Navision.bak' WITH NOFORMAT, INIT, NAME = N'MyDB-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUM
GO
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N'MyDB' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'MyDB' )
if @backupSetId is null begin raiserror(N'Verify failed. Backup information for database ''MyDB'' not found.', 16, 1) end
RESTORE VERIFYONLY FROM DISK = N'C:\Backup\Navision.bak' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
GO

Creazione di un Bat per l'avvio dello script di backup

Creiamo il file bat C:\Backup\BkpMyDB.bat con i seguenti comandi per avviare lo script di backup e rinominare il file MyDB.bak nel formato MyDB-Yeay-Month-Day-Hour-Minute-Second.bak in modo da conservare più versioni di backup:

SETLOCAL

SET BKPFILENAME=MyDB
SET BKPEXT=bak

SET MONTH=%DATE:~3,2%
SET DAY=%DATE:~0,2%
SET YEAR=%DATE:~6,4%
SET HOUR=%TIME:~0,2%
SET MINUTE=%TIME:~3,2%
SET SECOND=%TIME:~6,2%

SET BKPFILE=%BKPFILENAME%-%YEAR%-%MONTH%-%DAY%-%HOUR%-%MINUTE%-%SECOND%.%BKPEXT%

SQLCMD -S .\SQLEXPRESS -i BKP%BKPFILENAME%.sql

IF EXIST %BKPFILENAME%.%BKPEXT% RENAME %BKPFILENAME%.%BKPEXT% %BKPFILE%

Creazione di un'operazione pianificata

A questo punto creiamo un'operazione pianificata per avviare il file C:\Backup il file BkpMyDB.bat quando intendiamo eseguire il backup in modo da automatizzare il processo. In ogni caso possiamo eseguire backup anche in specifici istanti semplicemente eseguendo il Bat dal prompt dei comadi.

Metodo 2

Creazione di uno script WSH

Creiamo il file bat C:\Backup\BkpMyDB.vbs che tramite l'utilizzo della libreria COM SQLDMO esegue sul file C:\Backup\MyDB-Yeay-Month-Day-Hour-Minute-Second.bak il backup del database:

srvName = ".\SQLEXPRESS"
dbName = "MyDB"
bkpPath = "C:\Backup\"


Set srv = CreateObject("SQLDMO.SQLServer")
srv.LoginSecure = True
srv.Connect srvName

Set bkp = CreateObject("SQLDMO.Backup")


bkp.Database=dbName
bkp.Devices=Files
bkp.Action = SQLDMOBackup_Database
bkp.Files=bkpPath & dbName
bkp.Files=bkp.Files & "-" & Mid(FormatDateTime(Now, 2),7,4)
bkp.Files=bkp.Files & "-" & Mid(FormatDateTime(Now, 2),4,2)
bkp.Files=bkp.Files & "-" & Mid(FormatDateTime(Now, 2),1,2)
bkp.Files=bkp.Files & "-" & Mid(FormatDateTime(Now, 3),1,2)
bkp.Files=bkp.Files & "-" & Mid(FormatDateTime(Now, 3),4,2)
bkp.Files=bkp.Files & "-" & Mid(FormatDateTime(Now, 3),7,2)
bkp.Files=bkp.Files & ".bak"

bkp.SQLBackup srv

srv.Close()

Metodo 3

Applicazione .NET 2.0

SQL Server 2005 mette a disposizione delle nuove librerie in .NET per la gestione tramite applicazioni esterne che vanno a sostituire SQLDMO, in particolare è possibile utilizzare le Microsoft.SqlServer.Smo.dll e Microsoft.SqlServer.ConnectionInfo.dll aggiugendo le relative .NET Reference ad un progetto VB.NET 2005 per poter eseguire il backup del database.

Il seguente codice esegue semplicemente il backup del database è poi possibile avviare l'applicazione tramite le operazioni pianificate oppure integrare nel'applicazione stessa uno schedulatore tramite un timer per costruire di fatto una sorta di SQL Agent.

Dim srvName As String = ".\SQLEXPRESS"
Dim dbName As String = "MyDB"
Dim bkpPath As String = "C:\Backup\"

Dim srv As New Microsoft.SqlServer.Management.Smo.Server(srvName)
Dim bkp As New Microsoft.SqlServer.Management.Smo.Backup
bkp.Action = Microsoft.SqlServer.Management.Smo.BackupActionType.Database
bkp.Database = dbName

Dim filePath As String = bkpPath
filePath = System.IO.Path.Combine(bkpPath, dbName & "-" & Now.Year() & _
"-" & Now.Month.ToString("00") & _
"-" & Now.Day.ToString("00") & _
"-" & Now.Hour.ToString("00") & _
"-" & Now.Minute.ToString("00") & _
"-" & Now.Second.ToString("00"))

bkp.Devices.AddDevice(filePath, Microsoft.SqlServer.Management.Smo.DeviceType.File)
bkp.SqlBackup(srv)

Print | posted on Friday, February 03, 2006 11:54 AM |

Feedback

No comments posted yet.

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 3 and 1 and type the answer here:

Powered by:
Powered By Subtext Powered By ASP.NET