Batch-Skript zum Sichern aller SQL Server-Datenbanken
Wie Sie eine SQL Server-Datenbank von der Befehlszeile aus sichern, ist bereits besprochen worden. Was ist, wenn Sie alle Datenbanken auf einmal sichern möchten? Sie können ein Batch-Skript erstellen, das den Sicherungsbefehl für jede Datenbank ausführt. Dieses Skript muss jedoch jedes Mal aktualisiert werden, wenn eine Datenbank hinzugefügt oder entfernt wird. Darüber hinaus werden die Datenbanksicherungen alle an eine Datei angehängt, die bei jeder Ausführung um die Größe der neuen Sicherung wächst. Stattdessen erstellen wir ein Batch-Skript, das sich an Ihren SQL Server anpasst, wenn neue Datenbanken hinzugefügt und entfernt werden.
Um es auf den Punkt zu bringen, ist dies das Backup-Skript:
@ECHO OFF
SETLOCALREM Get Date im Format JJJJ-MM-TT (setzt voraus, dass das Gebietsschema die Vereinigten Staaten ist)
FOR / F “Token = 1,2,3,4 Delims = /” %% A IN ('Date / T') SET NowDate = %% D - %% B - %% CREM Erstellen Sie eine Liste der zu sichernden Datenbanken
SET DBList =% SystemDrive% SQLDBList.txt
SqlCmd -E -S MyServer -h-1 -W -Q “SET NoCount ON; SELECT Name FROM master.dbo.sysDatabases WO [Name] NOT IN ("master", "model", "msdb", "tempdb") ">"% DBList% "REM Sichern Sie jede Datenbank, wobei das Datum dem Dateinamen vorangestellt wird
FOR / F "tokens = *" %% I IN (% DBList%) DO (
ECHO Datenbank sichern: %% I
SqlCmd -E -S MyServer -Q "BACKUP DATABASE [%% I] TO Disk =" D: Sicherung% NowDate% _ %% I.bak ""
ECHO.
)REM Bereinigen Sie die temporäre Datei
WENN EXIST "% DBList%" DEL / F / Q "% DBList%"ENDLOCAL
Unter der Annahme, dass das Datum am 13.01.2009 liegt und Sie 3 Datenbanken mit den Namen 'MyDB', 'AnotherDB' und 'DB Name with Spaces' haben, erzeugt das Skript 3 Dateien am angegebenen Sicherungsspeicherort:
- 2009-01-13_AnotherDB.bak
- 2009-01-13_DB Name mit Spaces.bak
- 2009-01-13_MyDB.bak
Anpassen und Ausführen des Batch-Skripts
Natürlich sollten Sie das Skript an Ihre Umgebung anpassen. Daher müssen Sie Folgendes tun:
- Wenn das Gebietsschema Ihres Computers nicht auf die USA eingestellt ist, gibt der Befehl "Date / T" möglicherweise kein Datum im Format "Di 13.01.2009" zurück. In diesem Fall erzeugt die NowDate-Variable nicht das gewünschte Format und sollte angepasst werden. (1 Stelle)
- Ändern Sie "MyServer" in den Namen Ihres SQL-Servers (fügen Sie ggf. den Instanznamen hinzu). (2 Plätze)
- Die Datenbanken mit den Namen "master", "model", "msdb" und "tempdb" sind Datenbanken, die mit SQL Server ausgeliefert werden. Sie können dieser Liste weitere Datenbanknamen hinzufügen, wenn diese nicht gesichert werden sollen. (1 Stelle)
- Ändern Sie den Sicherungsspeicherort von "D: Backup" in den Speicherort, in dem die Datenbanksicherungsdateien gespeichert werden sollen.
Wenn Sie das Batch-Skript angepasst haben, planen Sie es als Benutzer mit Administratorrechten über Windows Task Scheduler ein.