RS First Dynamics NAV Blog


...from NAV 3.60 to NAV 2013
Archivio Posts
Anno 2015

Anno 2014

Anno 2013

Anno 2012

Anno 2011

Anno 2010

Anno 2009

Anno 2008

Anno 2007

Impostare un Backup con SQL Server Express

articolo di di Ermanno Goletto

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)
Categoria: Sql Server ALL
sabato, 28 apr 2007 Ore. 11.07

Messaggi collegati


Statistiche
  • Views Home Page: 471.751
  • Views Posts: 889.043
  • Views Gallerie: 0
  • n° Posts: 343
  • n° Commenti: 0
Copyright © 2002-2007 - Blogs 2.0
dotNetHell.it | Home Page Blogs
ASP.NET 2.0 Windows 2003