/ / Batch Script for å sikkerhetskopiere alle dine SQL Server-databaser

Batch script for å sikkerhetskopiere alle dine SQL Server-databaser

Vi har allerede dekket hvordan du sikkerhetskopierer en SQLServerdatabase fra kommandolinjen, så hva om du vil sikkerhetskopiere alle databasene dine samtidig? Du kan lage et batch-skript som kjører sikkerhetskopikommandoen for hver database, men dette skriptet må oppdateres hver gang en database blir lagt til eller fjernet. I tillegg vil databasesikkerhetskopiene legges til én fil som vil vokse med størrelsen på den nye sikkerhetskopien hver gang den kjøres. I stedet for, på riktig måte "sett det og glem det", vil vi lage et batch-skript som vil tilpasse seg SQL Server når nye databaser blir lagt til og fjernet.

For å komme rett på poenget, er dette sikkerhetskopi-skriptet:

@ECHO AV
SETLOCAL

REM Få dato i format ÅÅÅÅ-MM-DD (forutsetter at lokalområdet er USA)
FOR / F “tokens = 1,2,3,4 delims = /” %% A IN (‘Date / T’) SET SET NowDate = %% D - %% B - %% C

REM Bygg en liste over databaser som skal sikkerhetskopieres
SETT DBList =% SystemDrive% SQLDBList.txt
SqlCmd -E -S MyServer -h-1 -W -Q “SET NoCount ON; VELG Navn FRA master.dbo.sysDatabaser WHERE [Name] NOT IN ('master', 'model', 'msdb', 'tempdb') ">"% DBList% "

REM sikkerhetskopier hver database, og forhåndsdato til filnavnet
FOR / F “tokens = *” %% I IN (% DBList%) DO (
ECHO Sikkerhetskopieringsdatabase: %% I
SqlCmd -E -S MyServer -Q “BACKUP DATABASE [%% I] TO Disk =’ D: Backup% NowDate% _ %% I.bak '”
EKKO.
)

REM Rydd opp temp-filen
HVIS EXIST “% DBList%” DEL / F / Q “% DBList%”

ENDLOCAL

Forutsatt at datoen er 13/1/2009 og du har 3 databaser med navnet 'MyDB', 'AnotherDB' og 'DB Name with Spaces', vil skriptet produsere 3 filer på det angitte sikkerhetskopilokalet:

  • 2009-01-13_AnotherDB.bak
  • 2009-01-13_DB Navn med Spaces.bak
  • 2009-01-13_MyDB.bak

Tilpasse og kjøre batchskriptet

Selvfølgelig vil du tilpasse skriptet til miljøet ditt, så her er hva du trenger å gjøre:

  • Hvis maskinens lokalitet ikke er satt til USA,kommandoen ‘Date / T’ returnerer kanskje ikke datoen i formatet “Tir 01/13/2009”. Hvis dette er tilfelle, vil ikke NowDate-variabelen gi det ønskede formatet og bør justeres. (1 plass)
  • Endre ‘MyServer’ til å være navnet på SQL Server (legg til forekomstnavnet hvis det er aktuelt). (2 plasser)
  • Databasene med navnet 'master', 'model', 'msdb' og‘Tempdb’ er databaser som leveres med SQL Server. Du kan legge til flere databasenavn i denne listen hvis du ikke vil at de skal sikkerhetskopieres. (1 plass)
  • Endre sikkerhetskopieringsplasseringen fra ‘D: Backup’ til stedet der du vil lagre databasens sikkerhetskopifiler.

Når du har tilpasset batch-skriptet, kan du planlegge det å kjøre via Windows Task Scheduler som en bruker med administratorrettigheter, og du er klar.