>Vorrei impostare con sql server 2005 il seguente piano di manutenzione:
>* backup completo una volta alla settimana con sovrascrittura
>(un unico file)
Ciao,
Attenzione che questa scelta è MOLTO pericolosa: cosa succede se fallisce il backup e contestualmente si corrompe il db (per un guasto fisico o per un errore logico)?
Ti perderesti TUTTO!
Ti suggerisco di eseguire una rotazione settimanale dei backup, ad esempio mantenendo in linea gli ultimi 4 full backup; in questo modo avrai sempre disponibile 1 mese di dati.
Io ho implementato tutto a manina tramite job e la rotazione la effettuo la domenica notte tramite un banalissimo batch direttamente nel job di backup:
@echo off
Rem ***********************************************************************************
Rem *** Batch di rotazione mediaset ***
Rem *** ***
Rem *** Sintassi: Rotate [mediapath] [mediaset] ***
Rem ***********************************************************************************
If dummy==dummy%1 Goto Help
If -h==%1 Goto Help
If ?h==%1 Goto Help
If /h==%1 Goto Help
Rem ***********************************************************************************
Rem *** Inizializzazione ***
Rem ***********************************************************************************
Set MEDIAPATH=%1
Set MEDIASET=%2
If %MEDIASET%=="" Goto InvalidMediaset
Rem ***********************************************************************************
Rem *** Rotazione ***
Rem ***********************************************************************************
If Exist %MEDIAPATH%\%MEDIASET%.3.gz (
DEL %MEDIAPATH%\%MEDIASET%.3.gz
echo File %MEDIAPATH%\%MEDIASET%.3.gz eliminato.
) Else (
echo File %MEDIAPATH%\%MEDIASET%.3.gz non trovato.
)
If Exist %MEDIAPATH%\%MEDIASET%.2.gz (
REN %MEDIAPATH%\%MEDIASET%.2.gz %MEDIASET%.3.gz
echo Il file %MEDIAPATH%\%MEDIASET%.2.gz e' stato rinominato in %MEDIASET%.3.gz.
) Else (
echo File %MEDIAPATH%\%MEDIASET%.2.gz non trovato.
)
If Exist %MEDIAPATH%\%MEDIASET%.1.gz (
REN %MEDIAPATH%\%MEDIASET%.1.gz %MEDIASET%.2.gz
echo Il file %MEDIAPATH%\%MEDIASET%.1.gz e' stato rinominato in %MEDIASET%.2.gz.
) Else (
echo File %MEDIAPATH%\%MEDIASET%.1.gz non trovato.
)
If Exist %MEDIAPATH%\%MEDIASET%.bak (
REN %MEDIAPATH%\%MEDIASET%.bak %MEDIASET%.1
"%PROGRAMFILES%"\Rotate\gzip %MEDIAPATH%\%MEDIASET%.1
echo Il file %MEDIAPATH%\%MEDIASET%.bak e' stato rinominato in %MEDIASET%.1 e compresso.
) Else (
echo File %MEDIAPATH%\%MEDIASET%.bak non trovato.
)
echo.
echo Rotazione del mediaset "%MEDIASET%" terminata.
Goto Exit
:Help
echo.
echo Sintassi: Rotate [mediapath] [mediaset] (Es: Rotate S:\master master)
echo Operazione annullata.
Goto Exit
:InvalidMediaset
echo.
echo Si è verificato il seguente errore:
echo.
echo Parametri MEDIAPATH "%MEDIAPATH%" o MEDIASET "%MEDIASET%" non validi.
echo.
echo Operazione annullata.
:Exit
echo.
Come puoi notare, dopo aver rinominato il file .bak in .1 provvedo a comprimerlo con gzip, risparmiando in questo modo un sacco di spazio su disco
>* backup differenziale una volta al giorno (con creazione di
>vari files)
>* backup log transazioni ogni 2 ore (con creazione di vari files)
Per semplicità ti consiglio di creare un unico mediaset per database contenente n backupset indipendentemente dal loro tipo (FULL, DIFFETENTIAL o LOG).
In questo modo in 1 unico file fisico avrai tutti i backup eseguiti nella settimana di un singolo db.
In caso di disaster recovery dovrai destreggiarti con un solo file
Infine i backup andrebbero SEMPRE eseguiti direttamente su una risorsa di rete ESTERNA al server (ad esempio un NAS), non salvati in locale e successivamente spostati su server di backup, altrimenti se il server "crasha" prima che il file sia stato copiato sulla share ti perderesti l'ultimo backup.
>grazie
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org