SQL Express Datenbank sichern

Gerade bei kleinen Testsystemen benutzen bzw. installieren wir keinen ausgewachsenen SQL Server. Die SQL Express Varianten sind hervorragend zum Testen, aber auch zum Betrieb kleinerer Systeme mit Datenbankanbindung gut geeignet. Die lokale Installation auf einem Applikationsserver der nur eine einzige Aufgabe bekommen soll, ist wesentlich performanter. Aber auch diese Datenbanken müssen in regelmässigen Abständen gesichert werden.

Leider bieten die Express Varianten des SQL Servers keinerlei Möglichkeiten, Sicherungen per Agenten zeitgesteuert anzulegen. Zum Glück bringen die Express Varianten jedoch die CMD-Tools des großen Bruders mit. Und so können wir mit den Windows Bordmitteln die Datenbanken zeitgesteuert sichern.
Zunächst erstellen wir uns ein SQL Script welches den eigentlichen Backupvorgang durchführt.

BACKUP DATABASE [database1] TO DISK='E:\SQLExpress\database1_sicherung.bak'
WITH  INIT, NAME = N'database1_sicherung'

BACKUP DATABASE [database2] TO DISK='E:\SQLExpress\database2_sicherung.bak'
WITH  INIT, NAME = N'database2_sicherung'

BACKUP DATABASE [database3] TO DISK='E:\SQLExpress\database3_sicherung.bak'
WITH  INIT, NAME = N'database3_sicherung'

Dieses Script speichern wir als irgendwas.sql.
Als nächstes erstellen wir uns eine Batch Datei welche wir dann zeitgesteuert starten.

@echo off
"C:\Programme\Microsoft SQL Server\110\Tools\binn\SQLCMD.EXE" -S SQLSERVER\INSTANZ -E -i E:\SQLExpress\irgendwas.sql -o E:\SQLExpress\BackupLog.txt


rem Zeitstempel erzeugen
for /f "tokens=1-4 delims=. " %%i in ("%date%") do (
  set day=%%i
  set month=%%j
  set year=%%k
)

for /f "tokens=1-4 delims=.:, " %%i in ("%time%") do (
 set hour=%%i
 set minute=%%j
 set second=%%k
 set hundredth=%%l
)

rem Log-Datei mit Zeitstempel umbenennen
ren E:\SQLExpress\BackupLog.txt FullBackup-%year%-%month%-%day%-%hour%-%minute%.txt

rem E-Mail versenden
blat -body "Sicherung ist durchgelaufen.|Das Log ist dieser Mail beigefuegt.| " -attacht "E:\SQLExpress\FullBackup-%year%-%month%-%day%-%hour%-%minute%.txt" -server EXCHANGESERVER -f SENDER -subject "Datenbanksicherung SQLSERVER" -u USERNAME -pw PASSWORD -to EMPFAENGER

Hier sind natürlich jetzt noch folgende Werte anzupassen:
SQLSERVER = Der Name des SQLServers
INSTANZ = Der Instanzname auf dem SQL Server

Ab Zeile 22 findet bei mir noch das Versenden der Bestätigungsmail incl. der Logdatei statt und ist für den eigentlichen Backupvorgang nicht mehr von Bedeutung. Diese Zeilen habe ich lediglich nur unten stehenlassen um aufzuzeigen wie ein versenden einer Bestätigungsmail aussehen könnte. Mehr dazu weiter unten.
Zunächst jedoch eine kurze Erklärung was hier stattfindet. Wir rufen die CMD-Tools des SQL Servers auf. Diese liegen im Installationspfad des SQL Servers im Verzeichniss XXX\Tools\Binn. Je nach Version des SQL Express ist XXX mit dem Pfad zu ersetzten. In unserem Beispiel verwenden wir den SQL Express 2012 und finden die Tools entsprechend im Verzeichniss 110.
Der Schalter -S gibt den Servernamen\Instanznamen an. Mit dem Schalter -E geben wir an das es sich hierbei um eine Vertrauenswürdige Verbindung handelt.
Durch den Schalter -i geben wir den Pfad zur Scriptdatei an. In unserem Fall ist es die zuvor erstellte irgendwas.sql. Über den Schalter -o leiten wir die Standardausgabe in eine Datei um.

Ich denke das erzeugen des Zeitstempels und das anschließende Umbenennen der Logdatei muss hier nicht weiter erklärt werden.
Zu erwähnen ist jedoch das es sich hierbei um ein Backup handelt welches sich selber überschreibt. Es ist daher dafür Sorge zu tragen, bei Bedarf die einzelnen Sicherungsstände anderweitig zu sichern. Selbstverständlich kann man auch in dieses Script eine entsprechende Logik einbauen. Der Phantasie sind hier keinerlei Grenzen gesetzt.

Anschließend bleibt auch nur noch das entsprechende Batchscript in regelmäßigen Abständen über den Windows Taskplaner bzw. die Aufgabensteuerung auszuführen.

Wie angekündigt noch ein paar Worte zum Versand der Bestätigungsmail incl. Logdatei. Ich habe auf den meisten meiner Server das Tool Blat im Pfad windows\system32 hinterlegt, daher ist es mir in meinen Scripten vergönnt dieses Tool direkt als "Befehl" zu nutzen. Leider ist man auf dieses Tool angewiesen da die Batch unter Windows selber keine Mails versenden kann. Wer also entsprechende Mails benötigt, sollte sich die verschiedenen Möglichkeiten genauer ansehen und dann selber entscheiden welches Tool er benutzen mag bzw. kann.
Die Syntax von Blat kann man auf der entsprechenden Herstellerseite in Augenschein nehmen. Vielleicht werde ich dafür aber auch einfach mal einen Artikel verfassen.