[SQL 2005 Express] Creare BackUp Automatici

sabato 05 gennaio 2008 - 03.21

Domin Profilo | Newbie

Ciao,

Qualcuno sa consigliarmi una procedura per fare dei backup giornalieri ed automatici del database, in modo da salvarlo in posti (NAS, computer, ecc...) così che nel in cui il server si guastasse il database non andrà perso?

So che ci sono dei metodi automatici che offre sql 2005, però da quanto ho letto nella versione express non ci sono....

PS: Potrei utilizzare magari un'altra macchina in ascolto con un'altra istanza di SQL 2005 Express che fara da database secondario... però volevo sapere da qualcuno più esperto, se microsoft permette questo, oppure concede una sola istanza di sql express per ogni utente a cui installerò il programma...


Grazie

alx_81 Profilo | Guru

>Ciao,
Ciao
>
>Qualcuno sa consigliarmi una procedura per fare dei backup giornalieri
>ed automatici del database, in modo da salvarlo in posti (NAS,
>computer, ecc...) così che nel in cui il server si guastasse
>il database non andrà perso?
>
>So che ci sono dei metodi automatici che offre sql 2005, però
>da quanto ho letto nella versione express non ci sono....
Ho visto che hai postato verso le 3 di notte.. beh, eccomi qui quasi all'alba appena tornato da chissà dove a provare a risponderti.
Dunque, con SQL Server Express in effetti non hai uno strumento come i JOB delle altre versioni. Però hai un'utilità (ovviamente non solo per la versione Express) che si chiama SQLCMD e che insieme allo scheduler del tuo sistema operativo windows, può fare al caso tuo.

Ma procediamo per passi. SQLCMD è una tool che si esegue dal prompt di dos. Essa ti apre un ulteriore prompt per eseguire comandi SQL direttamente dalla console. Ad ogni modo, puoi farti uno script sql che gestisca il tuo backup (facilmente ricreabile tramite la funzionalità "Genera Script" che ogni maschera di Management studio ha. Ad ogni modo, qui ti allego un esempio di script per un backup full (con controllo checksum):

BACKUP DATABASE [Utili] TO DISK = N'C:\Programmi\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\Utili.bak' WITH NOFORMAT, NOINIT, NAME = N'Utili-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUM GO

Questo comando esegue il backup full di un ipotetico database "Utili" sulla cartella di default per i backup di SQL Server.
Ora, potresti semplicemente sostituire il nome del db, la descrizione del backup e il percorso con i tuoi valori, salvando poi lo script su di un file con estensione SQL, ad esempio, C:\Backup.sql.

Tramite SQLCMD poi, puoi decidere di lanciare il file:
sqlcmd -i C:\Backup.sql
In questo modo SQLCMD si occupa di eseguire il tuo backup. Però, visto che potresti avere più database, con percorsi differenti, non sarebbe male usufruire di variabili. Quindi puoi modificare lo script sql in questo modo:

BACKUP DATABASE $(MyDatabase) TO DISK = N'$(MyPath)' WITH NOFORMAT, NOINIT, NAME = N'$(MyDatabase)-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUM GO

Quello che sta tra $() è la variabile o meglio il placeholder della variabile che poi passerai dalla chiamata in questo modo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Così abbiamo anche parametrizzato lo script
Ma non è finita, se ti servisse anche un log di quello che è successo, basta aggiungere un -o PercorsodiOutput:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Alla fine dell'esecuzione avrai un resoconto dell'operazione, con eventuali errori

Infine manca la schedulazione per rendere automatica la "cosa". Queste istruzioni variano da un sistema operativo ad un altro.. quindi sappi che gli esempi sono per XP/2000/2003:

Vai sul pannello di controllo, seleziona Operazioni Pianificate (o Scheduled Tasks)
Crea una nuova operazione tramite il wizard e sfoglia per cercare la tool sqlcmd (percorso C:\Programmi\Microsoft SQL Server\90\Tools\Binn ma dipende dall'installazione di SQL Server)
Poi termina la configurazione definendo periodicità e ricorrenze, nonchè le credenziali di accesso all'operazione.
Ricordati di mettere nel comando quello che ti ho indicato sopra.
Il gioco è fatto.

Ovviamente puoi fare differenziali, backup del log ed altre operazioni, nell'esempio ti ho messo solo il backup full.
Ricorda anche che puoi scrivere variabili interne allo script sql utilizzando la :SetVar

:SetVar VarDiEsempio "CIAO" SELECT '$(VarDiEsempio)'

In questo modo avrai la select del valore "CIAO" in agiunta al resto delle operazioni.

N.B. l'autenticazione che SQLCMD usa automaticamente è quella di Windows. Quindi se sei un utente che ha gli accessi sufficienti per fare quel che ti serve ok, altrimenti puoi specificare le credenziali di sql utilizzando i parametri ulteriori -U e -P rispettivamente per l'utente e la password. Puoi anche specificare il server/istanza tramite il parametro -S.

Per ulteriori informazioni leggiti questo link:

Utilità SQLCMD
http://technet.microsoft.com/it-it/library/ms162773.aspx


>Grazie
di nulla!
Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

mimmomix77 Profilo | Newbie

Ciao .. domanda un pò difficile .. esiste un metodo, oppure modificando quello descritto sopra, per effettuare backup di database SQL express 2005 situati in un server virtuale remoto e copiarli su una macchina locale (nel mio ufficio)?

Grazie...!!!
ciao ciao!

alx_81 Profilo | Guru

>Ciao ..
Ciao!

>domanda un pò difficile .. esiste un metodo, oppure modificando
>quello descritto sopra, per effettuare backup di database SQL
>express 2005 situati in un server virtuale remoto e copiarli
>su una macchina locale (nel mio ufficio)?
Backup automatici di db express li puoi fare in vari modi (powershell, t-sql, ecc) però lo puoi schedulare soltanto con prodotti di terze parti oppure lo scheduler di windows.
Il problema sta nel fatto che per scaricare verso il tuo ufficio i file, devi fare in modo che il pc o il server che riceverà la copia del backup dovrà essere visibile in rete dal sql server virtuale.

>Grazie...!!!
di nulla!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

mimmomix77 Profilo | Newbie

Ti ringrazio della tempestiva risposta.. a questo punto, avendo accesso al server virtuale in Desktop Remoto, potrei utilizzare sqlcmd (con lo script descritto da te) per effettuare i backup dei database (sono all'incirca una 40ina) e schedularli con windows? ...o si può creare un unico script da inserire i nomi dei 40 db e schedulare un unico file? e poi per il trasferimento dei file nel mio ufficio... farlo in ftp o come si potrebbe fare?

Gentilissimo... e a presto.

Mimmo.

alx_81 Profilo | Guru

>Ti ringrazio della tempestiva risposta.. a questo punto, avendo
>accesso al server virtuale in Desktop Remoto, potrei utilizzare
>sqlcmd (con lo script descritto da te) per effettuare i backup
>dei database (sono all'incirca una 40ina) e schedularli con windows?
sì, sqlcmd, powershell, scegli tu..

>...o si può creare un unico script da inserire i nomi dei 40
>db e schedulare un unico file?
E' una tua scelta, o cicli sui metadati usando SMO con powershell per ricavare l'elenco dei db, oppure ti segni in un xml i tuoi db (occhio a tenerlo sincronizzato) e cicli quello..

>e poi per il trasferimento dei
>file nel mio ufficio... farlo in ftp o come si potrebbe fare?
Il problema sta nel fatto che il server comunque deve vedere la parte che tu hai reso pubblica nel tuo ufficio.
Oppure, se hai già un repository ftp sul quale va il tuo ufficio, puoi mandarlo direttamente là dal sql server, e poi il tuo pc può scaricare sempre da quell'ftp.
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

mimmomix77 Profilo | Newbie

Forse sarebbe meglio un xml con l'elenco dei DB? so che chiedo troppo, ma uno script di esempio si potrebbe avere? ...

Un altro quesito.... Praticamente questo server Virtuale è quello di Aruba, sul quale ho installato la versione Express di SQL 2005. Creando n. Database (circa 40 ... cioè un DB per ogni Cliente), ho problemi con la banda, perchè ci sono n. connessioni sul DB (circa 40), e dato che l'SQL express è l'imitato a 4 GB ho necessità di passare ad un altro SQL tipo il Workgroup ... ma dovrei cambiare anche la macchina virtuale... sapresti consigliarmi un Housing o un servizio di Server Dedicato oppure un servizio di Server SQL dedicato (se esiste) ???

Non so se sono stato chiaro... aspetto tue notizie.

Mimmo!

alx_81 Profilo | Guru

>Forse sarebbe meglio un xml con l'elenco dei DB? so che chiedo
>troppo, ma uno script di esempio si potrebbe avere? ...
Come lo vuoi fatto? XML e uno script powershell va bene?
Così vedi anche Powershell che è veramente all'avanguardia

>Un altro quesito.... Praticamente questo server Virtuale è quello
>di Aruba, sul quale ho installato la versione Express di SQL
>2005. Creando n. Database (circa 40 ... cioè un DB per ogni Cliente),
>ho problemi con la banda, perchè ci sono n. connessioni sul DB
>(circa 40), e dato che l'SQL express è l'imitato a 4 GB ho necessità
>di passare ad un altro SQL tipo il Workgroup ... ma dovrei cambiare
>anche la macchina virtuale... sapresti consigliarmi un Housing
>o un servizio di Server Dedicato oppure un servizio di Server
>SQL dedicato (se esiste) ???
Di solito uso solo l'hosting di www.databasemart.com. Prova a vedere se lì hanno qualcosa..
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

mimmomix77 Profilo | Newbie

Ciao Alex... scusa se ti risp. solo ora ma ho avuto un pò di prob. di febbre!!! ancora li tengo ma oggi mi sento leggermente meglio ... cmq prima di ammalarmi ho scaricato ed installato powershell ... non ci capisco niente ... cmq è sempre bello imparare cose nuove e poi ho solo dato un'occhiata ... ma solo da un'occhio, perchè l'altro era già chiuso al sito www.databasemart.com. sembra essere interessante, ma mi ci devo mettere tranquillo! aspetto il tuo script ... e come farlo funzionare con powershell ..

A presto...!
Mimmo.

tankian Profilo | Junior Member

risolto^^

PaoloC Profilo | Newbie

Io utilizzo uno script in VBS che mi esegue tutti i backup dei db attivi e li posiziona su una cartella che gli indico via script. Lo script lo pianifico tramite le operazioni pianificare di windows.
Se si aggiunge un db lo script alla prossima esecuzione lo backupperà senza la necesità di modificare nulla.
L'ho utilizzato spesso in caso di migrazioni di webserver...quindi quando era necessario eseguire il backup di varie decine di DB.
lo script è quì sotto... una spiegazione del funzionamento la puoi trovare a questo link https://consulentiit.wordpress.com/2010/08/02/vbscript-backup-mssql/

strComputer = "."
Dim sDBUser
Dim sDBPwd
Dim sDBServer
Dim sDBName

sDBUser = "sa"
sDBPwd = "sasa"
sDBServer = ".\"
backupPath = "C:\Test\"
Set oSQLServer = CreateObject("SQLDMO.SQLServer")
Set oDataBase = Server.CreateObject("SQLDMO.Database")
Set oBackup = CreateObject("SQLDMO.Backup")
oSQLServer.LoginTimeout = 30
oSQLServer.LoginSecure = True
oSQLServer.Connect sDBServer, sDBUser, sDBPwd
For Each oDataBase In oSQLServer.Databases
If oDataBase.SystemObject = False Then
sDBName = oDataBase.Name
oBackUp.Initialize = "TRUE" ' Means overwrite existing .bak file.
oBackup.Database = sDBName
oBackup.Action = SQLDMOBackup_Database
oBackup.Files = backupPath & sDBName & ".bak"
oBackup.SQLBackup oSQLServer
End If
Next

fabionet31 Profilo | Newbie

ciao a tutti, ho lo stesso problema, e ho provato a risolverlo come scritto sopra:

vado in SQL Managemente Studio Express creo uno script:
BACKUP DATABASE [PRODUZIONE]
TO DISK = N'C:\SALVATAGGIO.BAK'
WITH NOFORMAT, NOINIT, NAME = N'PRODUZIONE-fULL Database Backup',
SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUM
GO

lo salvo c:\backup.sql eseguo e mi da:

esito
10 percento elaborato.
20 percento elaborato.
30 percento elaborato.
40 percento elaborato.
50 percento elaborato.
60 percento elaborato.
70 percento elaborato.
80 percento elaborato.
90 percento elaborato.
Elaborate 736 pagine per il database 'PRODUZIONE', file 'PRODUZIONE' nel file 1.
100 percento elaborato.

sembra ok ma... se guardo le dimensioni del backup mi ritrovo 5mbyte contro i 24mbyte di quello
che genera con il suo tool di backup, inoltre al comando sqlcmd -i c:\backup.sql mi rimane la shell nera per qualche secondo, si chiude e non fa nulla.

potete aiutarmi? grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5