Hemsida » hur » Batch Script för att säkerhetskopiera alla dina SQL Server-databaser

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

    Vi har redan täckt hur du säkerhetskopierar en SQL Server-databas från kommandoraden, så vad om du vill säkerhetskopiera alla dina databaser samtidigt? Du kan skapa ett batch-skript 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 databasbackuperna att läggas till en fil som kommer att växa med storleken på den nya säkerhetskopian varje gång den körs. Istället, i äkta "set it and forget it" mode, skapar vi ett batch script som anpassar sig till din SQL Server eftersom nya databaser läggs till och tas bort.

    För att komma till rätta, är detta backup-skriptet:

    @ECHO OFF
    SETLOCAL

    REM Hämta datum i format YYYY-MM-DD (förutsatt att landet är USA)
    FOR / F "tokens = 1,2,3,4 delims = /" %% A IN ('Datum / T') DO SET NowDate = %% D - %% B - %% C

    REM Bygg en lista över databaser för att säkerhetskopiera
    SET DBList =% SystemDrive% SQLDBList.txt
    SqlCmd -E -S MyServer -h-1 -W -Q "SET NoCount ON; SELECT Name FROM master.dbo.sysDatabases WHERE [Name] INTE IN ('master', 'model', 'msdb', 'tempdb') ">"% DBList% "

    REM Backup varje databas, lägger ut datumet till filnamnet
    FOR / F "tokens = *" %% I IN (% DBList%) DO
    ECHO Backup-databas: %% I
    SqlCmd -E -S MyServer -Q "BACKUP DATABASE [%% I] TO Disk =" D: Backup% NowDate% _ %% I.bak ""
    EKO.
    )

    REM Rensa tempfilen
    OM EXIST "% DBList%" DEL / F / Q "% DBList%"

    ENDLOCAL

    Förutsatt att datumet är 1/13/2009 och du har 3 databaser som heter 'MyDB', 'AnotherDB' och 'DB Name with Spaces', kommer skriptet att producera 3 filer i den angivna backupplatsen:

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

    Anpassa och köra batchskriptet

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

    • Om din maskinens språk inte är inställd på USA, kanske inte kommandot "Date / T" returnerar datumet i formatet "tis 01/13/2009". Om så är fallet kommer nudate-variabeln inte att producera önskat format och bör justeras. (1 ställe)
    • Ändra 'MyServer' för att vara namnet på din SQL Server (lägg till förekomstnamnet om det är tillämpligt). (2 platser)
    • Databaserna namnet 'master', 'model', 'msdb' och 'tempdb' är databaser som skickas med SQL Server. Du kan lägga till ytterligare databasnamn i den här listan om du inte vill att de ska säkerhetskopieras. (1 ställe)
    • Ändra säkerhetskopieringsplatsen från "D: Backup" till den plats där du vill spara databasens backupfiler.

    När du har anpassat batch-skriptet ska du schemalägga det för att köras via Windows Task Scheduler som en användare med administratörsrättigheter och du är helt upptagen.