/ / Batch script för att säkerhetskopiera alla dina SQL Server-databaser

Satsa skript för att säkerhetskopiera alla dina SQL Server-databaser

Vi har redan täckt hur du säkerhetskopierar en SQLServerdatabas från kommandoraden, så om du vill säkerhetskopiera alla dina databaser samtidigt? Du kan skapa ett batchskript som kör backup-kommandot för varje databas, men det här skriptet måste uppdateras varje gång en databas läggs till eller tas bort. Dessutom kommer databas-säkerhetskopiorna att läggas till en fil som kommer att växa med storleken på den nya säkerhetskopian varje gång den körs. I stället skapar vi på ett riktigt sätt "sätt det och glöm det" -mode ett batch-skript som kommer att anpassas till din SQL Server när nya databaser läggs till och tas bort.

För att komma rätt till detta är detta backupskriptet:

@ECHO AV
SETLOCAL

REM Hämta datum i format YYYY-MM-DD (förutsätter att landets land är USA)
FOR / F “tokens = 1,2,3,4 delims = /”%% A IN (‘Date / T’) DO SET NowDate = %% D - %% B - %% C

REM Bygg en lista med databaser som ska säkerhetskopieras
SET DBList =% SystemDrive% SQLDBList.txt
SqlCmd -E -S MyServer -h-1 -W -Q “SET NoCount ON; VÄLJ Namn FRÅN master.dbo.sysDatabaser VAR [Namn] INTE IN ('master', 'model', 'msdb', 'tempdb') ">"% DBList% "

REM Säkerhetskopiera varje databas och förbered datumet till filnamnet
FOR / F “tokens = *”%% I IN (% DBList%) DO (
ECHO Säkerhetskopiera databasen: %% I
SqlCmd -E-S MyServer -Q “BACKUP DATABASE [%% I] TO Disk = 'D: Backup% NowDate% _%% I.bak'”
EKO.
)

REM Rengör tempfilen
OM EXIST "% DBList%" DEL / F / Q "% DBList%"

ENDLOCAL

Förutsatt att datumet är 1/13/2009 och du har 3 databaser med namnet 'MyDB', 'AnotherDB' och 'DB Name with Spaces' kommer skriptet att producera 3 filer på den angivna säkerhetsplatsen:

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

Anpassa och köra batchmanus

Naturligtvis vill du anpassa skriptet till din miljö så här är vad du behöver göra:

  • Om maskinens landstatus inte är inställd på USA,kommandot "Date / T" kanske inte returnerar datumet i formatet "Tis 01/13/2009". Om så är fallet kommer variabeln NowDate inte att producera önskat format och bör justeras. (1 plats)
  • Ändra "MyServer" för att vara namnet på din SQL Server (lägg till instansnamnet om tillämpligt). (2 platser)
  • Databaserna med namnet 'master', 'model', 'msdb' och"Tempdb" är databaser som levereras med SQL Server. Du kan lägga till ytterligare databasnamn till den här listan om du inte vill att de ska säkerhetskopieras. (1 plats)
  • Ändra säkerhetskopieringsplatsen från 'D: säkerhetskopia' till den plats där du vill lagra databasens säkerhetskopieringsfiler.

När du har anpassat batchskriptet, schemalägg det för att köras via Windows Task Scheduler som en användare med administratörsrättigheter och du är klar.