Schedule backup e delete backup di due settimane fa

mercoledì 13 aprile 2011 - 15.21
Tag Elenco Tags  Windows Server 2008 R2  |  Windows Server 2008  |  Windows Server 2003  |  Visual Studio 2010  |  SQL Server 2008 R2  |  SQL Server 2008  |  SQL Server 2005  |  SQL Server 2000  |  SQL Server Express

gsflash80 Profilo | Junior Member

ciao a tutti, sto provando a fare il bakcup nel DB sql server 2008.

ho creato il device bakcup, poi con lo script per fare backup ogni due settimane con FULL.

ho fatto in questo modo:

DECLARE @nome_backup varchar(100) DECLARE @backup_vecchio varchar(100) set @nome_backup = 'nomeDB-'+ convert(char(8), getdate(), 112) +''; set @backup_vecchio = 'nomeDBVECCHIO-' BACKUP DATABASE [DATAB] TO [DEVICEBACKUO] WITH RETAINDAYS = 7, NOFORMAT, NOINIT, NAME = @nome_backup, SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO

non saprei se questo fa veramente il backup ogni settimana, visto che RETAINDAYS = 7 (7 giorni) ma non è la scadenza, che cosa fa se scade? fa di nuovo da solo il backup?

invece vorrei che cancellasse il backup di oltre due settimane precedente, ad esempio:

set @backup_vecchio = 'nomeDBVECCHIO-' <--------- come farei a prelevare quello vecchio?

ho pensato di fare DATEDIFF @nome_backup e @backup_vecchio, se sono oltre 15 giorni, cancella quello vecchio (es. NOME_BACKUP-20110413 e NOME_BACKUP-20110331) visto che è oltre di 15 giorni, cancella SOLO QUELLO NOME_BACKUP-20110331, così la settimana prossima toglie quello NOME_BACKUP-20110406.
Ne avreste una idea? e poi vi domando se conviene di salvare il backup FULL ogni settimana e DIFFERENTIAL ogni giorno? dovrei fare altro device?
Magari che si fa solo SQLCMD.
Vi ringrazio anticipatamente, ho iniziato da poco ad usare sql server 2008. E' il piacere di aver trovato questo forum.
Buon pomeriggio

lbenaglia Profilo | Guru

>ho fatto in questo modo:
>
>
>DECLARE @nome_backup varchar(100)
>DECLARE @backup_vecchio varchar(100)
>
>set @nome_backup = 'nomeDB-'+ convert(char(8), getdate(),
>112) +'';
>
>set @backup_vecchio = 'nomeDBVECCHIO-'
>
>BACKUP DATABASE [DATAB] TO [DEVICEBACKUO]
>WITH RETAINDAYS = 7, NOFORMAT, NOINIT,
>NAME = @nome_backup, SKIP, NOREWIND, NOUNLOAD, STATS = 10
>GO
>
>
>
>non saprei se questo fa veramente il backup ogni settimana, visto
>che RETAINDAYS = 7 (7 giorni) ma non è la scadenza, che cosa
>fa se scade? fa di nuovo da solo il backup?

Dato che ogni volta che eseguirai il backup il device sarà univoco, andrai a generare sempre un nuovo mediaset (un nuovo file per essere chiari), pertanto le impostazioni WITH RETAINDAYS = 7, NOINIT sono inutili mentre gli altri parametri puoi tranquillamente ometterli dato che nel tuo caso non servono.

Il backup lo devi schedulare tu, via SQL Server Agent o altro schedulatore, altrimenti non verranno "magicamente" eseguiti

>invece vorrei che cancellasse il backup di oltre due settimane
>precedente, ad esempio:
>
>set @backup_vecchio = 'nomeDBVECCHIO-' <--------- come farei
>a prelevare quello vecchio?
>
>ho pensato di fare DATEDIFF @nome_backup e @backup_vecchio, se
>sono oltre 15 giorni, cancella quello vecchio (es. NOME_BACKUP-20110413
>e NOME_BACKUP-20110331) visto che è oltre di 15 giorni, cancella
>SOLO QUELLO NOME_BACKUP-20110331, così la settimana prossima
>toglie quello NOME_BACKUP-20110406.
>Ne avreste una idea?

Se utilizzi la Standard Edition o superiore puoi servirti di un comodo Maintenance Plan che esegue backup e pulizie varie, altrimenti devi implementare le tue logiche in uno script batch, vbs o PowerShell.

>e poi vi domando se conviene di salvare
>il backup FULL ogni settimana e DIFFERENTIAL ogni giorno?
Lo devi stabilire tu in base alle tue policy. Tieni solo presente che per ripristinare un backup differenziale devi prima ripristinare l'ultimo full.

>dovrei fare altro device?
Non necessariamente se vuoi puoi mettere i due backupset nel medesimo mediaset.

>Magari che si fa solo SQLCMD.
>Vi ringrazio anticipatamente, ho iniziato da poco ad usare sql
>server 2008. E' il piacere di aver trovato questo forum.
>Buon pomeriggio
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

gsflash80 Profilo | Junior Member


>BACKUP DATABASE [DATAB] TO [DEVICEBACKUO]
>WITH RETAINDAYS = 7, NOFORMAT, NOINIT,
>NAME = @nome_backup, SKIP, NOREWIND, NOUNLOAD, STATS = 10
>GO


dovrei togliere NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS=10, solo questi?

poi


>Il backup lo devi schedulare tu, via SQL Server Agent o altro schedulatore, altrimenti non verranno >"magicamente" eseguiti

vada bene che uso task schedule di window server 2008?



>Se utilizzi la Standard Edition o superiore puoi servirti di un comodo Maintenance Plan che esegue >backup e pulizie varie, altrimenti devi implementare le tue logiche in uno script batch, vbs o >PowerShell.

Cercherò questo in giro RETE. e poi con SQLCMD sarebbe conveniente? perchè magari che dovrei mandare il file script ad un collega che si trova al cliente, lo usa OSQL file.sql (ma per fare backup, come si fa ad escludere quello LOG? Gli interessa soltanto BAK e MDB), quando il file MDB era troppo grande, ho usato shrink (ho sbagliato ad usare questo?) ma per automatizzare cioè quando si arriva ad 1 GB e inizia a fare shrink database, è possibile? (sto provando a chiedere prechè siamo nel XXI secolo :D)

>Lo devi stabilire tu in base alle tue policy. Tieni solo presente che per ripristinare un backup >differenziale devi prima ripristinare l'ultimo full.

cioè ad esempio BACKUP FULL di una settimana fa e il BACKUP differential di ogni giorno, se faccio il RESTORE dovrei prendere l'ultimo BK-FULL di una settimana fa e perderei quello differential di 6 giorni dopo del BK-FULL di una settimana fa?

>Non necessariamente se vuoi puoi mettere i due backupset nel medesimo mediaset.
E' sempre sufficiente di fare diversi nomi in un unico device?

Grazie molto

lbenaglia Profilo | Guru

>dovrei togliere NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS=10,
>solo questi?
Togli tutto da WITH (compresa) in poi.

>vada bene che uso task schedule di window server 2008?
Si.

>Se utilizzi la Standard Edition o superiore puoi servirti di un comodo Maintenance Plan che esegue
>backup e pulizie varie, altrimenti devi implementare le tue logiche in uno script batch, vbs o PowerShell.
>
>Cercherò questo in giro RETE. e poi con SQLCMD sarebbe conveniente?
Cosa? Con SQLCMD interagisci con il DBMS, non cancelli file su file system

>perchè magari che dovrei mandare il file script ad un collega
>che si trova al cliente, lo usa OSQL file.sql (ma per fare backup,
>come si fa ad escludere quello LOG? Gli interessa soltanto BAK
>e MDB), quando il file MDB era troppo grande, ho usato shrink
>(ho sbagliato ad usare questo?) ma per automatizzare cioè quando
>si arriva ad 1 GB e inizia a fare shrink database, è possibile?
>(sto provando a chiedere prechè siamo nel XXI secolo :D)
Troppe domande sconnesse

>cioè ad esempio BACKUP FULL di una settimana fa e il BACKUP differential
>di ogni giorno, se faccio il RESTORE dovrei prendere l'ultimo
>BK-FULL di una settimana fa e perderei quello differential di
>6 giorni dopo del BK-FULL di una settimana fa?
Si, ultimo FULL in modalità norecovery + ultimo DIFF.

>E' sempre sufficiente di fare diversi nomi in un unico device?
Non capisco il senso grammaticale della frase

>Grazie molto
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

gsflash80 Profilo | Junior Member


>Cercherò questo in giro RETE. e poi con SQLCMD sarebbe conveniente?
>Cosa? Con SQLCMD interagisci con il DBMS, non cancelli file su file system
sinceramente non ho capito bene su questo, potresti spiegare meglio?

>Troppe domande sconnesse
lascio perdere questo :)

>Si, ultimo FULL in modalità norecovery + ultimo DIFF.
puoi fare un esempio postando il code?

>Non capisco il senso grammaticale della frase
quando ho creato il nome del device, potrei fare 2 nomi diversi (uno per fare il backup full, e altro backup differential), così scriverei due scripts di backup (full/differential) in un unico file SQL.

..:: GSFLASH ::..
http://www.gsflash.it
http://blogs.dotnethell.it/gabrieleserpi/
MCTS - ACP - OCP - ECDL - ACSP
Ubuntu 11.04/OpenSuse 10.3
Vista Seven/MacOSX SnowLeopard

lbenaglia Profilo | Guru

>sinceramente non ho capito bene su questo, potresti spiegare
>meglio?
Eh, cosa vuoi che ti dica? SQLCMD è una utility command line per connettersi e gestire una istanza SQL Server. Per cancellare un file usi il comando DEL batch.

>puoi fare un esempio postando il code?
http://groups.google.com/group/microsoft.public.it.sql/msg/544c349b932dfb77

>quando ho creato il nome del device, potrei fare 2 nomi diversi
>(uno per fare il backup full, e altro backup differential), così
>scriverei due scripts di backup (full/differential) in un unico
>file SQL.
E che senso avrebbe eseguire un FULL e 1ms dopo un DIFFERENTIAL?

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

gsflash80 Profilo | Junior Member

>Eh, cosa vuoi che ti dica? SQLCMD è una utility command line per connettersi e gestire una istanza SQL Server. Per cancellare un file usi il comando DEL batch.
proverò a vedere su questo.

>puoi fare un esempio postando il code?
>https://groups.google.com/group/microsoft.public.it.sql/msg/544c349b932dfb77?hl=it
anche questo, grazie.

>quando ho creato il nome del device, potrei fare 2 nomi diversi
>(uno per fare il backup full, e altro backup differential), così
>scriverei due scripts di backup (full/differential) in un unico
>file SQL.
>E che senso avrebbe eseguire un FULL e 1ms dopo un DIFFERENTIAL?
infatti, per questo volevo capire, perchè non vale la pena di fare un file SQL, ma in DEVICE con due nomi diversi (non se si chiamano istanze) che uno fa ogni 7 giorni con full e altro ogni giorno differential.
Comunque non sei obbligato a rispondere, ci proverò lo stesso a girare in rete cercando di capire su questa cosa. Già mi sei stato d'aiuto ;-)

Ciao!
--
..:: GSFLASH ::..
http://www.gsflash.it
http://blogs.dotnethell.it/gabrieleserpi/
MCTS - ACP - OCP - ECDL - ACSP
Ubuntu 11.04/OpenSuse 10.3
Vista Seven/MacOSX SnowLeopard

lbenaglia Profilo | Guru

>infatti, per questo volevo capire, perchè non vale la pena di
>fare un file SQL, ma in DEVICE con due nomi diversi (non se si
>chiamano istanze) che uno fa ogni 7 giorni con full e altro ogni
>giorno differential.
>Comunque non sei obbligato a rispondere, ci proverò lo stesso
>a girare in rete cercando di capire su questa cosa. Già mi sei
>stato d'aiuto ;-)

Ma figurati, perché non dovrei rispondere? Il problema è che a volte faccio fatica a comprendere il senso delle tue frasi
Se vuoi ti spiego come farei io:

Uno script che esegue un FULL BACKUP che schedulerei ad esempio tutte le domeniche alle 02:00 di notte;
Un secondo script che esegue un DIFFERENTIAL schedulato tutti i giorni alle 02:00 di notte (ad esclusione della domenica).

Il task che esegue il full backup conterrà un secondo step di tipo batch (esegue un banale .bat o se preferisci uno script PowerShell .ps) che elimina tutti i differenziali e i full una volta che il full backup è stato eseguito con successo). In questo modo manterrai pulito il file system.

Un consiglio: se ti è possibile esegui i backup su una share di rete in modo da metterti al riparo da eventuali crash dei dischi/controller del server SQL.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5