Sicherung von Microsoft SQL Server Express

Sicherung von Microsoft SQL Server Express

Die wachsende Anzahl der installierten Microsoft SQL Server Instanzen bereitet vielen IT  Administratoren Kopfzerbrechen und dem einen oder anderen sogar schlaflose Nächte. Durch die Gratis-Version Microsoft SQL Server Express nimmt die Anzahl von Datenbankinstanzen ständig zu.

Viele Softwarepakete die alle Vorteile eines Datenbankservers nutzen und dabei trotzdem kostengünstig angeboten werden, nutzen diese Version des SQL Servers, um alle Vorteile des professionellen Datenbanksystems zu nutzen. Lösungen auf Basis SQL Server Express sind skalierbar, denn die Datenbank kann zu einem späteren Zeitpunkt auf eine größere Version von SQL Server verlagert werden.

Bei SQL Server Express ist keine automatische Sicherung vorgesehen.

Oft wird dabei jedoch übersehen, dass diese Datenbanken bei der normalen Sicherung nicht mitgesichert werden, und nach einem Crash nicht mehr wiederhergestellt werden können. Kostenpflichtige Versionen von Microsoft SQL Server (Workgroup, Standard oder Enterprise Edition) bieten die Funktionalität für automatische Sicherung. Im Management Studio Express sind diese jedoch nicht verfügbar, da der Job Scheduler Service „SQL Server Agent“ in den Express Versionen nicht unterstützt wird. Der Dienst wird zwar bei der Installation der Express Edition installiert, kann jedoch nicht gestartet
werden.

Sicherungs-Varianten

Es gibt drei Möglichkeiten, SQL Express zu sichern:

  1. Datenbankdienst stoppen und die Dateien sichern, oder
  2. Über Management Studio Express die Datenbanken einzeln sichern, oder
  3. Online-Sicherung der Datenbank über Scripts

Das Stoppen der Datenbank ist oft nicht so leicht machbar, weil eventuell Programme darauf zugreifen. Beim Betrieb einer Website würde das Stoppen der Datenbankdienste die Funktionalität der Website einschränken oder gar ganz lahmlegen.

Eine manuelle Sicherung über SQL Server Management Studio Express ist aufwändig, da eine tägliche Sicherung meist zu den Mindestanforderungen gehört.

Offline-Sicherung

Alle drei Varianten haben jedoch eine Berechtigung. Es macht Sinn, nach der Installation und nach jeder Änderung (z.B. Hinzufügen von Datenbanken und Benutzern, oder einrichten/ändern einer Synchronisationsverbindung) eine offline Sicherung der Systemdatenbanken (master, model, msdb) zu machen. Dies erfolgt durch das Stoppen des Datenbankdienstes – z.B. „SQL Server (SQLEXPRESS)) – und der Sicherung der
Datenbankdateien (.mdb) und Logdateien (.ldf).

 

Automatisierung der SQL Server Sicherung über Script

Um den Server täglich zu sichern kann auch ein Script verwendet werden. Die SQL Server Sicherung im unten angeführten Beispiel besteht aus zwei Scripts. Die eigentliche Funktionalität ist in T-SQL geschrieben, zum Aufruf über Windows wird ein Command Script verwendet, das über den Windows Explorer, den Windows Scheduler oder die Eingabeaufforderung ausgeführt werden kann.

Inhalt SqlServerBackup.sql

/*
 SQL Server Backup Script
 Copyright: isiCore GmbH, 2011 (http://www.isicore.de)
 Lizenz: GPL 3 (http://www.gnu.org/licenses/gpl-3.0.html)
 Haftungsausschluss: isiCore übernimmt keine Haftung für
 Schäden jeglicher Art, die durch das Originalscript oder
 durch eine angepasste Version dieses Scripts entstanden sind
 oder entstehen werden. Die Ausführung dieses Scripts erfolgt
 auf eigene Verantwortung, deshalb sollte die Funktionalität -
 speziell nach Anpassungen - in einer Testumgebung geprüft
 werden. Eine vorherige manuelle Sicherung der Datenbanken
 wird empfohlen.    
*/
 USE master
 GO
 DECLARE @isicore_backup_dir nvarchar(150) = 'C:\temp\sqlbackup\';
 DECLARE isicore_cur CURSOR FOR SELECT name FROM sys.databases
           WHERE name NOT IN ('tempdb')
 DECLARE @isicore_db_name nvarchar(100);
 DECLARE @isicore_backup_name nvarchar(250);
 OPEN isicore_cur;
 FETCH FROM isicore_cur INTO @isicore_db_name;
 WHILE @@FETCH_STATUS = 0
 BEGIN
     SELECT @isicore_backup_name =
                @isicore_backup_dir + @isicore_db_name + '.bak';
     BACKUP DATABASE @isicore_db_name
         TO DISK = @isicore_backup_name
         WITH FORMAT,
             MEDIANAME = @isicore_db_name, NAME = @isicore_db_name;
     FETCH NEXT FROM isicore_cur into @isicore_db_name;
 END
 CLOSE isicore_cur
 DEALLOCATE isicore_cur
 GO

 

Um die Sicherungsdateien auf einem anderen Pfad abzulegen,  kann die Variable @isicore_backup_dir geändert werden. Dabei ist zu beachten,  dass die Zeichenfolge mit einem Backslash (\) abschließt. Dieses Verzeichnis sollte in die normale Datensicherung mit einbezogen werden, da diese Sicherungsdateien bei jeder Sicherung überschrieben werden.

 

Inhalt SqlExpressBackup.cmd

sqlcmd -S  ".\SQLEXPRESS" -E -i c:\windows\scripts\SqlExpressBackup.sql

Parameter:

-S Servername

Hat die SQL Server Express Instanz einen anderen Namen, sollte der hier ersetzt werden.

–E

Bewirkt, dass die Verbindung zum SQL Server mit den aktuellen Anmeldeinformationen aufgebaut wird. Es sollte sichergestellt werden, dass der ausführende Benutzer Sysadmin Rechte auf der SQL Server Express Instanz hat.

Vor dem Testen des Sicherungs-Scripts sollte – vor allem wenn einige Parameter angepasst werden mussten – eine Systemsicherung und eine manuelle Sicherung aller Datenbanken durchgeführt werden.

 

SQL Server Sicherungs-Script: Jetzt gratis herunterladen!

Das Script fällt unter die GNU Public License und kann somit kostenlos heruntergeladen, angepasst, eingesetzt und weitergegeben werden. Dabei muss die Copyright-Information erhalten bleiben.

 

Bild: © valdezrl – Fotolia.com

 

3 Kommentare zu Sicherung von Microsoft SQL Server Express

  1. Hallo zusammen

    Besten Dank für diese Anleitung. Werde ich gerne ausprobieren. Nur… wie kann man solche Backups im Microsoft SQL Server Express dann wiederherstellen?

    Mit freundlichen Grüssen
    Christian Schaller

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>