Hjemmeside » hvordan » Batch Script til sikkerhedskopiering af alle dine SQL Server databaser

    Batch Script til sikkerhedskopiering af alle dine SQL Server databaser

    Vi har allerede dækket, hvordan du sikkerhedskopierer en SQL Server-database fra kommandolinjen, så hvad hvis du vil sikkerhedskopiere alle dine databaser på én gang? Du kan oprette et batch script, der kører backup kommandoen for hver database, men dette script skal opdateres hver gang en database tilføjes eller fjernes. Derudover vil databasekoblingerne tilføjes til en fil, som vil vokse med størrelsen af ​​den nye backup hver gang den køres. I stedet vil vi i ægte "sæt det og glemme det" mode skabe et batch script, som vil tilpasse til din SQL Server, da nye databaser tilføjes og fjernes..

    For at komme lige til punktet er dette backup scriptet:

    @ECHO OFF
    setlocal

    REM Hent dato i formatet ÅÅÅÅ-MM-DD (forudsætter at landet er USA)
    FOR / F "tokens = 1,2,3,4 delims = /" %% A IN ('Dato / T') GØR SET NowDate = %% D - %% B - %% C

    REM Opbyg en liste over databaser til sikkerhedskopiering
    SET DBList =% SystemDrive% SQLDBList.txt
    SqlCmd -E -S MyServer -h-1 -W -Q "SET NoCount ON; SELECT Navn FRA master.dbo.sysDatabases WHERE [Name] IKKE IN ('master', 'model', 'msdb', 'tempdb') ">"% DBList% "

    REM Sikkerhedskopiér hver database, forudbestilling af datoen til filnavnet
    FOR / F "tokens = *" %% I IN (% DBList%) DO ()
    ECHO Sikkerhedskopieringsdatabase: %% I
    SqlCmd -E -S MyServer -Q "BACKUP DATABASE [%% I] TIL Disk =" D: Backup% NowDate% _ %% I.bak ""
    EKKO.
    )

    REM Ryd op temp file
    HVIS EXIST "% DBList%" DEL / F / Q "% DBList%"

    ENDLOCAL

    Forudsat datoen er 1/13/2009, og du har 3 databaser med navnet 'MyDB', 'AnotherDB' og 'DB Name with Spaces', vil scriptet producere 3 filer på den angivne backupplacering:

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

    Tilpasning og kørsel af batch script

    Selvfølgelig vil du tilpasse scriptet til dit miljø, så her er hvad du skal gøre:

    • Hvis din maskinens lokalitet ikke er indstillet til USA, kan kommandoen 'Dato / T' muligvis ikke returnere datoen i formatet "Tue 01/13/2009". Hvis dette er tilfældet, producerer NowDate-variablen ikke det ønskede format og skal justeres. (1 plads)
    • Skift 'MyServer' for at være navnet på din SQL Server (tilføj forekomstnavn hvis det er relevant). (2 steder)
    • Databaserne 'master', 'model', 'msdb' og 'tempdb' er databaser, der sendes med SQL Server. Du kan tilføje yderligere database navne til denne liste, hvis du ikke vil have, at de skal sikkerhedskopieres. (1 plads)
    • Skift backupplaceringen fra 'D: Backup' til det sted, hvor du vil have databasens backupfiler gemt.

    Når du har tilpasset batch scriptet, skal du planlægge det til at køre via Windows Task Scheduler som en bruger med administratorrettigheder, og du er helt indstillet.