Logo faq-o-matic.net
Logo faq-o-matic.net

Automatische Backups für SQL Server Express

von veröffentlicht am20. April 2008, 20:22 Uhr Kurzlink und Zitatlink einblenden
Kategorie Kategorie: Administration, Datensicherung, Scripting, SQL Server   Translate with Google Translate Translate EN   Die angezeigte Seite drucken
Zuletzt aktualisiert: 16. Dezember 2009

Die Express-Edition des SQL Server 2005 erfreut sich ähnlich großer Beliebtheit wie ihre Vorgängerin MSDE. Der Grund liegt auf der Hand: Nicht nur ist diese Datenbank kostenlos, sondern sie ist (fast) genauso leistungsfähig wie der „große“ SQL Server aus dem Hause Microsoft. Ganz nebenbei spricht SQL Server 2005 Express aber auch dieselbe Sprache wie der ausgewachsene Datenbankserver, und das macht es einfach, bei Bedarf auf die Vollversion umzusteigen: In der Applikation muss nur der Servername angepasst und dann die Datenbank verschoben werden, und alles läuft wie vorher.

Neben den funktionalen Einschränkungen – die Größe der verwaltbaren Datenbanken ist begrenzt, und es können nur wenige Benutzer gleichzeitig performant arbeiten – gibt es aber auch in der Verwaltung der Datenbanken einige Hindernisse. Das Verwaltungswerkzeug SQL Server Management Studio fehlt, und auch die Automatisierungskomponente SQL Server Agent ist bei der Express Edition nicht ohne Weiteres nutzbar. Wenn man weiß, was zu tun ist, lässt sich diese Lücke aber für viele Fälle mit dem Windows-eigenen Taskplaner und ein paar Skripts überbrücken.

Ein großes Problem in der Praxis ist, dass viele Express-Datenbanken faktisch nie richtig gesichert werden. Ein Serverausfall hat so unter Umständen kritische Auswirkungen, denn die Daten sind weg. Dabei bringt SQL Server selbst schon alles mit, was man für eine ordentliche Datensicherung braucht – auch die Express Edition kann das. Man muss nur wissen, wie.

SQL-Sicherung mit Bordmitteln

Das folgende Skript sichert sowohl die Datenbank selbst als auch die Transaktionsprotokolle in jeweils eine Datei. Letzteres ist wichtig, falls das „Wiederherstellungsmodell“ der Datenbank auf „Vollständig“ steht. Wird in diesem Fall keine regelmäßige Transaktionsprotokollsicherung durchgeführt, kann die Serverfestplatte volllaufen. Im Beispiel heißt die Datenbank „MeineDB“.

BACKUP DATABASE [MeineDB] TO DISK='C:\Backup\MeineDB_sich.bak'
WITH  INIT, NAME = N'MeineDB_Sicherung'

BACKUP LOG [MeineDB] TO DISK='C:\Backup\MeineDB_Log_sich.bak'
WITH INIT, NAME = N'MeineDB_Log_Sicherung'

Die Option „with init“ sorgt dafür, dass die Sicherungsdatei bei jedem Backup überschrieben wird. In der Datei ist so nur die letzte Sicherung enthalten. Diese Datei wird gespeichert als „MeineDB-Fullbackup.sql“. Wer in einem separaten Job nur die Transaktionprotokolle sichern möchte, teilt die Datei in zwei und setzt jeweils nur das „backup database“- bzw. das „backup log“-Kommando in eine Datei. Der folgende Code bildet die Batchdatei, die z.B. täglich mit dem Windows-Taskplaner aufgerufen wird:

@echo off
rem Ausführen eines Full Backup der MeineDB-Datenbank
rem !! das Folgende ist eine einzige Zeile!
"C:\Programme\Microsoft SQL Server\90\Tools\binn\SQLCMD.EXE" -S DBSERVER
   -E -i C:\Backup\MeineDB-FullBackup.sql -o C:\Backup\BackupLog.txt
rem !! ab hier wieder normal

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 C:\Backup\BackupLog.txt FullBackup-%year%-%month%-%day%-%hour%-%minute%.txt

Diese Batchdatei ruft das SQL-Sicherungsskript mit dem Hilfsprogramm sqlcmd.exe auf, das den SQL Server auf der Kommandozeile ansteuern kann. Der Datenbankserver trägt hier den Namen „DBSERVER“. Zur besseren Nachverfolgung schreibt die Batchdatei die Ausgaben des sqlcmd-Kommandos in eine Logdatei, die dann mit dem aktuellen Zeitstempel umbenannt wird.

Dieses Verfahren funktioniert (voraussichtlich) auch mit SQL Server 2008 Express Edition. Natürlich kann man so auch Datenbanken eines „echten“ SQL Server sichern, nur ist es in dem Fall sinnvoller, das SQL-Backupskript gleich über den mitgelieferten SQL Server Agent auszuführen, der sich zur SQL-Automatisierung noch besser eignet.

© 2005-2023 bei faq-o-matic.net. Alle Rechte an den Texten liegen bei deren Autorinnen und Autoren.

Jede Wiederveröffentlichung der Texte oder von Auszügen daraus - egal ob kommerziell oder nicht - bedarf der ausdrücklichen Genehmigung durch die jeweiligen Urheberinnen oder Urheber.

Das Impressum findet sich unter: http://www.faq-o-matic.net/impressum/

Danke, dass du faq-o-matic.net nutzt. Du hast ein einfaches Blog sehr glücklich gemacht!