Vi har allerede dekket hvordan du sikkerhetskopierer en SQL Server-database fra kommandolinjen, så hva om du vil sikkerhetskopiere alle databasene dine samtidig? Du kan opprette et batch script som kjører sikkerhetskommandoen for hver database, men dette skriptet må oppdateres hver gang en database legges til eller fjernes. I tillegg vil databasekoblingene legges til en fil som vil vokse med størrelsen på den nye sikkerhetskopien hver gang den kjøres. I stedet, i sann "sett det og glem det" mote, vil vi lage et batch script som vil tilpasse seg din SQL Server som nye databaser blir lagt til og fjernet.
For å komme rett til poenget, er dette backup-skriptet:
@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
Forutsatt datoen er 1/13/2009 og du har 3 databaser som heter 'MyDB', 'AnotherDB' og 'DB Name with Spaces', vil skriptet produsere 3 filer i den angitte backupplasseringen:
- 2009-01-13_AnotherDB.bak
- 2009-01-13_DB Navn med Spaces.bak
- 2009-01-13_MyDB.bak
Tilpasse og kjøre Batch Script
Selvfølgelig vil du tilpasse skriptet til miljøet ditt, så her er det du trenger å gjøre:
- Hvis maskinens språk ikke er satt til USA, kan ikke kommandoen "Dato / T" returnere datoen i formatet "Tue 01/13/2009". Hvis dette er tilfelle, vil ikke NowDate-variabelen produsere ønsket format og skal justeres. (1 plass)
- Endre "MyServer" for å være navnet på SQL Server (legg til forekomstnavnet hvis det er aktuelt). (2 steder)
- Databasene "master", "model", "msdb" og "tempdb" er databaser som leveres med SQL Server. Du kan legge til flere databasenavn til denne listen hvis du ikke vil at de skal sikkerhetskopieres. (1 plass)
- Endre reserveplasseringen fra 'D: Backup' til stedet der du vil lagre databasens sikkerhetskopieringsfiler.
Når du har tilpasset batch-skriptet, planlegger det å kjøre via Windows Oppgaveplanlegger som en bruker med administratorrettigheter, og du er helt innstilt.