Abbiamo già spiegato come eseguire il backup di un database SQL Server dalla riga di comando, quindi cosa succede se si desidera eseguire il backup di tutti i database contemporaneamente? È possibile creare uno script batch che esegua il comando di backup per ciascun database, ma questo script dovrebbe essere aggiornato ogni volta che viene aggiunto o rimosso un database. Inoltre, i backup del database verranno aggiunti a un unico file che crescerà in base alla dimensione del nuovo backup ogni volta che viene eseguito. Invece, nel vero modo "impostalo e dimenticalo", creeremo uno script batch che si adatterà al tuo SQL Server man mano che i nuovi database verranno aggiunti e rimossi.
Per arrivare dritto al punto, questo è lo script di backup:
@ECHO OFF SETLOCAL
REM Get date in format YYYY-MM-DD (assumes the locale is the United States) FOR /F “tokens=1,2,3,4 delims=/” %%A IN (‘Date /T’) DO SET NowDate=%%D-%%B-%%C
REM Build a list of databases to backup SET DBList=%SystemDrive%SQLDBList.txt SqlCmd -E -S MyServer -h-1 -W -Q “SET NoCount ON; SELECT Name FROM master.dbo.sysDatabases WHERE [Name] NOT IN (‘master’,’model’,’msdb’,’tempdb’)” > “%DBList%”
REM Backup each database, prepending the date to the filename FOR /F “tokens=*” %%I IN (%DBList%) DO ( ECHO Backing up database: %%I SqlCmd -E -S MyServer -Q “BACKUP DATABASE [%%I] TO Disk=’D:Backup%NowDate%_%%I.bak'” ECHO. )
REM Clean up the temp file IF EXIST “%DBList%” DEL /F /Q “%DBList%”
ENDLOCAL
Supponendo che la data sia 1/13/2009 e si disponga di 3 database denominati "MyDB", "AnotherDB" e "DB Name with Spaces", lo script produrrà 3 file nella posizione di backup specificata:
- 2009-01-13_AnotherDB.bak
- 2009-01-13_DB Nome con Spaces.bak
- 2009-01-13_MyDB.bak
Personalizzazione ed esecuzione dello script batch
Ovviamente, vorrete personalizzare lo script nel vostro ambiente, ecco cosa dovete fare:
- Se la locale della tua macchina non è impostata negli Stati Uniti, il comando 'Data / T' potrebbe non restituire la data nel formato "Tue 01/13/2009". Se questo è il caso, la variabile NowDate non produrrà il formato desiderato e dovrebbe essere regolata. (1 posto)
- Modificare "MyServer" come nome del server SQL (aggiungere il nome dell'istanza, se applicabile). (2 posti)
- I database denominati "master", "model", "msdb" e "tempdb" sono database forniti con SQL Server. È possibile aggiungere ulteriori nomi di database a questo elenco se non si desidera che vengano sottoposti a backup. (1 posto)
- Cambiare il percorso di backup da "D: Backup" alla posizione in cui si desidera archiviare i file di backup del database.
Dopo aver personalizzato lo script batch, programmarlo per l'esecuzione tramite l'Utilità di pianificazione di Windows come utente con diritti di amministratore e tutto è pronto.