MS-SQL-Server Express sichern

MS SQL Express – automatische Backups ohne Wartungsplan

Die Daten eines SQL-Servers automatisch zu sichern ist äußerst wichtig. Bei den kostenlosen SQL-Server-Express-Versionen von MS findet sich der Punkt „Wartungsplan“ nicht im Server Management-Studio, mit dem man regelmäßige Datensicherungen planen kann. Diese Funktion bleibt den kostenpflichtigen großen Versionen vorbehalten und mit einer Kopie des Programmverzeichnisses und der darin liegenden Datenbankdateien ist es nicht getan – die Kopie wird fehlschlagen, da die Datenbankdateien ja jederzeit geöffnet sind.

Es gibt jedoch die Möglichkeit, die interne Sicherungsfunktion des SQL-Express-Servers von außen anzustoßen. Hierzu werden zwei Dateien benötigt. Die eine Datei enthält den SQL-Code, der den Umfang und das Ziel der Sicherung bestimmt (hier: Backup.sql), die andere Datei (hier: StartBackup.cmd) ruft diese Datei dann z.B. über den Taskplaner von Windows regelmäßig automatisch auf. In unserem nachfolgenden Beispiel sind beide Dateien im Ordner C:/SQL-Backup


Erstellung der Backup.sql

Starten Sie das SQL-Server-Management-Studio und klicken Sie mit der rechten Maustaste auf eine Datenbank. Über Tasks-> Sichern können Sie eine manuelle Sicherung der DB anstoßen. Treffen Sie hier alle Einstellungen und wählen Sie auch das Sicherungsziel aus. Bevor Sie die Sicherung starten klicken Sie im oberen linken Bereich des Fensters auf die Schaltfläche „Skript“. Hier ist der Inhalt hinterlegt den wir für unsere Datei benötigen.

Kopieren Sie den Inhalt in eine Textdatei und benennen Sie sie um in Backup.sql. Sollen mehrere Datenbanken gesichert werden, gehen Sie dazu einfach wie oben beschrieben mit der nächsten Datenbank vor und hängen Sie das entstehende SQL-Skript in der Backup.sql an. Das Ergebnis für eine vollständige Kopiesicherung zweier Datenbanken sieht dann in etwa so aus:


BACKUP DATABASE [vStdPlan_2019_20_HJ_2] TO DISK = N'C:\SQL-Backup' WITH COPY_ONLY, NOFORMAT, NOINIT, NAME = N'vStdPlan_2019_20_HJ_2_Sicherung', SKIP, NOREWIND, NOUNLOAD, STATS = 10

GO

BACKUP DATABASE [vStdPlan_Global] TO DISK = N' C:\SQL-Backup' ' WITH COPY_ONLY, NOFORMAT, NOINIT, NAME = N'vStdPlan_Global_Sicherung', SKIP, NOREWIND, NOUNLOAD, STATS = 10

GO


So würde das bereits funktionieren, in meinem Fall jedoch soll der Dateiname der Sicherungen das Datum und die Uhrzeit der Sicherung enthalten. Hierfür ist der jeweilige Code etwas umfangreicher (hier: vStdPlan_Global):


DECLARE @FileName AS NVARCHAR(80)

SET @FileName = ' N'C:\SQL-Backup\vStdPlan_Global_' + CONVERT(VARCHAR(14), GETDATE(), 23) + '_' + RIGHT('00' + CONVERT(NVARCHAR(2), DATEPART(HOUR, GETDATE())), 2) + RIGHT('00' + CONVERT(NVARCHAR(2), DATEPART(MINUTE, GETDATE())), 2) +RIGHT('00' + CONVERT(NVARCHAR(2), DATEPART(SECOND, GETDATE())), 2) +'.bak'

BACKUP DATABASE [vStdPlan_Global]

TO DISK = @FileName

WITH COPY_ONLY, NOFORMAT, NOINIT,

NAME = N'Datenbank Sichern', SKIP, NOREWIND, NOUNLOAD, STATS = 10

GO


Auch dieser Code kann einfach mehrfach in die Backup.sql geschrieben/kopiert werden, wo man dann anschließend einfach die Angaben zur Datenbank und zum Dateinamen ändern muss.

Erstellung der StartBackup.cmd

Erstellen Sie mit einem Editor eine Textdatei und benennen Sie sie um in StartBackup.cmd. Die Datei benötigt den folgenden Inhalt:


@Echo Off

SQLCMD -E -S Servername\SQLEXPRESS -i C:\SQL-Backup\Backup.sql

GO


„Servername“ ist hier durch den Namen des PC zu ersetzen, auf dem die Sicherung vorgenommen wird.

Nun würden Ihre Sicherungen bereits bequem mit einem Doppelklick auf die StartBackup.cmd durchgeführt.

Um dies nun zu automatisieren, nutzen Sie einfach den Windows Aufgabenplaner und erstellen Sie einen zeitgesteuerten Task, der die StartBackup.cmd regelmäßig aufruft.



Herzlichen Dank an M. Pistoor, BBS-Cuxhaven für die Infos dazu!