In meiner Blogserie SQL Server 2014 ging es in bereits um Serverseitige Datenbankprogrammierung, die Verwaltung von Zugriffsberechtigungen und die Datenbank-E-Mail. In dieser letzten Folge wird es um Datenbanksicherungen bzw. Backup und Recovery gehen.

In Serverdatenbanken werden in der Regel nicht private Adressdaten, sondern wichtige Unternehmensdaten gespeichert. Damit kommt der Datensicherung ein besonderes Augenmerk zu. Der SQL Server bietet Ihnen hierzu entsprechende Möglichkeiten an, die vor allem im vollen Betrieb erfolgen. Es ist nicht notwendig, dass Benutzer sich zuvor von der Datenbank abmelden.

SQL Server stellt Ihnen unterschiedliche Sicherungsvarianten zur Verfügung. Die Wahl der geeigneten Methode erfolgt nach der Größe der Datenbank und der für die Sicherung zur Verfügung stehenden Zeit sowie dem Speicherplatz:

  • Vollständig: Es wird eine vollständige Sicherung der Datenbank angelegt, die den gesamten Zustand der Datenbank zu diesem Zeitpunkt widerspiegelt. Nach einer vollständigen Sicherung kann das Transaktionsprotokoll abgeschnitten werden, da alle protokollierten und abgeschlossenen Vorgänge in der gesicherten Datenbank festgeschrieben sind.
  • Differenziell: Um Zeit – besonders bei großen Datenbanken oder häufigen Sicherungen – zu sparen, kann hierüber eine Sicherung erstellt werden, die lediglich die Änderungen seit der letzten vollständigen Sicherung enthält. Für das Wiederherstellen werden sowohl die letzte vollständige Sicherung als auch die differenzielle Sicherung benötigt. Jedoch ist es mit dieser Sicherungsmethode alleine nicht möglich, bei einem Ausfall der Datenbank den Zustand bis exakt vor dem Ausfall wiederherzustellen. Dazu werden zusätzliche Transaktionsprotokollsicherungen benötigt, die zum Beispiel im Anschluss an die differenzielle Sicherung durchgeführt werden.
  • Transaktionsprotokoll: Mithilfe einer Transaktionsprotokollsicherung kann der Zustand der Datenbank bei einem Ausfall bis zu diesem Zeitpunkt wiederhergestellt werden. Im Transaktionsprotokoll sind alle Transaktionen, die seit der letzten voll-ständigen Datenbanksicherung, differenziellen Sicherung oder Transaktionsprotokollsicherung abgeschlossen wurden, enthalten. Bei der Sicherung des Transaktionsprotokolls werden alle bereits inaktiven Transaktionen gesichert und im Anschluss aus dem Protokoll entfernt. Der nicht mehr benötigte Speicherplatz wird dabei freigegeben.
    Wichtig zu beachten ist allerdings: Eine vollständige Wiederherstellung bis zum Zeitpunkt des Ausfalls ist auch mit einer Transaktionsprotokollsicherung nur dann möglich, wenn das Wiederherstellungsmodell der Datenbank auf Vollständig (FULL) eingestellt ist.
  • Datei- und Dateigruppensicherung: Dies ist eine fortgeschrittene Möglichkeit, um die Sicherung extrem großer Datenbanken in mehrere Teilschritte aufzuteilen. Auf diese Variante wird zurückgegriffen, wenn die Datenbank so groß ist, dass eine gewöhnliche Sicherung in dem zur Verfügung stehenden Zeitfenster nicht möglich ist. Die Datei- und Dateigruppensicherung steht zur Verfügung, wenn die Datenbank aus mehreren Datendateien besteht, die zu verschiedenen Dateigruppen zusammengefasst worden sind. Für eine lediglich aus einer primären Datendatei (*.mdf) bestehende Datenbank steht diese Option daher nicht zur Verfügung.

Datenbank sichern

SQL Server 2014 unterstützt unterschiedliche Ziele für Sicherungen. Diese können je nach Gegebenheit eingesetzt werden. Als Ziel für eine Sicherung kann eine

  • Datei auf einer Festplatte,
  • ein Windows Azure-Blob-Speicher oder
  • ein Bandlaufwerk

angegeben werden. Die Möglichkeit, auf ein Bandlaufwerk zu sichern ist in dieser Version aber abgekündigt und läuft daher aus. Die empfohlene Methode ist es, Datenbanksicherungen auf einer Festplatte anzulegen, um diese zu einem späteren Zeitpunkt gemeinsam mit der täglichen Dateisicherung zum Beispiel auf ein Bandlaufwerk oder anderes modernes Sicherungsmedium zu sichern.

Um die Verwaltung von Sicherungszielen zu vereinfachen, bietet der SQL Server die Möglichkeit, sogenannte Sicherungsmedien anzulegen. Diese ermöglichen es, einfach auf Sicherungsziele zuzugreifen, ohne sich jedes Mal über Pfade und Speicherorte Gedanken machen zu müssen. Sie können eine Sicherung allerdings auch ohne ein Sicherungsmedium direkt in eine Zieldatei erstellen. Die Verwendung eines Sicherungsmediums erhöht lediglich die Übersicht beim Sichern. Beim Anlegen eines solchen Mediums wird ein Ziel festgelegt, auf das in weiterer Folge dann einfach über den Namen des Mediums zugegriffen werden kann. Wenn man so möchte, kann man ein Sicherungsmedium als einen Aliasnamen für ein Speicherziel bezeichnen.

Um ein Sicherungsmedium mithilfe von Transact-SQL anzulegen, verwenden Sie die gespeicherte Systemprozedur sp_addumpdevice. Diese Prozedur benötigt folgende Parameter verwenden:

  • @devtype: Als Ziel für das Sicherungsmedium geben Sie über diesen Parameter entweder disk für eine Festplatte oder tape für ein Bandmedium an. Letzteres läuft allerdings wie bereits erwähnt aus.
  • @logicalname: Der logische Name ist der eigentliche Name des Sicherungsmediums, der für die Sicherung verwendet und im Management Studio angezeigt wird.
  • @physicalname: Der physische Name legt das eigentliche Sicherungsziel fest. Es handelt sich um den Pfad zu einer lokalen Datei, ein gemapptes Laufwerk oder einen UNC-Pfad. Für das erste Bandlaufwerk im Server geben Sie zum Beispiel \\.\TAPE0

Um beispielsweise ein Sicherungsmedium mein_medium mit dem Dateinamen meine_sicherung.bak im Verzeichnis D:\DB\Backup auf dem Server anzulegen, verwenden Sie die folgende Anweisung in einem Abfrageeditor-Fenster:

EXEC dbo.sp_addumpdevice @devtype = 'disk',
                         @logicalname = 'mein_medium',
                         @physicalname = 'D:\DB\Backup\meine_sicherung.bak';

 

Nachdem Sie ein Sicherungsmedium angelegt haben, kann dieses sofort für Sicherungen verwendet werden.

Zu Begriffsklärung sei vorweg noch Folgendes erwähnt:

  • Ein Sicherungsmedium ist eine Datei, in der ein oder mehrere Sicherungssätze gespeichert werden können.
  • Ein Sicherungssatz ist das Ergebnis eines Sicherungslaufs. Dieser ist entweder das Ergebnis einer vollständigen, einer differenziellen oder einer Transaktionsprotokollsicherung. In einem Sicherungsmedium bzw. einer Sicherungsdatei können mehrere Sicherungssätze gespeichert werden. Beim Wiederherstellen muss dann angegeben werden, welcher der Sicherungssätze aus einem Medium zu verwenden ist. Geschieht dies nicht, wird immer der erste (d. h. älteste) Sicherungssatz zur Wiederherstellung verwendet.

Sicherungen können Sie entweder mit dem Management Studio über den grafischen Dialog oder über Transact-SQL-Anweisungen vernehmen. Ich werde Ihnen hier die Variante über Abweisungen vorstellen.

Verwenden Sie dazu den Transact-SQL-Befehl BACKUP DATABASE. Die Syntax des Befehls zur vollständigen Sicherung einer Datenbank lautet:

BACKUP DATABASE datenbankname TO backup_device | {DISK|TAPE|URL} = 'sicherungspfad'

 

Das Sicherungsziel können Sie hier je nach Belieben auf eine der folgenden Arten angeben:

  • Backup-Device: Auf dem Server definierte Sicherungsmedien werden bei einer Sicherung als Ziel angegeben. Wie Sie ein neues Sicherungsmedium mit der Prozedur sp_addumpdevice erstellen, haben Sie weiter vorne erfahren. Den Namen des Mediums verwenden Sie in der Backup-Anweisung als Zielangabe. Hier erkennen Sie nun einen Vorteil von serverseitig definierten Sicherungsmedien. Diese sind in der BACKUP-Anweisung wesentlich einfacher und kürzer anzugeben als ein vollständiger Zielpfad im Dateisystem.
  • Sicherungspfad: Alternativ können Sie einen Pfad auf einem Speichermedium angeben. In der Regel ist das ein Pfad auf einer Festplatte. Ein Sicherungsband können Sie angeben, diese Option ist aber wie erwähnt bereits abgekündigt. Dafür besteht in der Version 2014 die neue Option URL. Als Pfadangabe für eine Datei kann ein Laufwerksbuchstabe oder auch ein UNC-Pfad verwendet werden. Geben Sie entweder nur den Namen des Mediums oder den Pfad der Datei an. Falls Sie kein definiertes Sicherungsmedium verwenden, müssen Sie vor dem Dateinamen den Vorsatz DISK= Zum Beispiel:
    DISK = 'D:\DB\Backup\meine_db.bak'

 

Um die Datenbank meine_db in eine Datei zu sichern, verwenden Sie beispielsweise folgende Anweisung:

BACKUP DATABASE meine_db
TO DISK = 'D:\DB\Backup\meine_db.bak';

 

Wenn Sie diese Anweisung ein weiteres Mal ausführen, wird standardmäßig ein zusätzlicher Sicherungssatz in die Datei eingefügt. Um den alten Sicherungssatz mit der neuen Sicherung zu überschreiben, verwenden Sie die Option INIT.

BACKUP DATABASE meine_db
TO DISK = 'D:\DB\Backup\meine_db.bak'
WITH INIT;

 

Um ein Backup in ein vorbereitetes Sicherungsmedium vorzunehmen, genügt beispielsweise folgende Anweisung:

BACKUP DATABASE meine_db TO mein_medium;

 

In der Online-Dokumentation finden Sie eine Übersicht über alle weiteren Optionen.

Beachten Sie bei der Angabe des Sicherungspfades, dass dieser immer aus Sicht des Rechners, der als Datenbankserver fungiert, anzugeben ist. Dies ist wichtig, falls Sie die Sicherung remote von einem anderen Rechner aus starten.

Datenbank wiederherstellen

Um eine regelmäßige Sicherung zu erstellen, muss ein Auftrag für den SQL Server-Agent erstellt werden. Dieser Auftrag wird mit einem Zeitplan versehen und dann vom Agent ausgeführt. Mit der Express Edition des SQL Server 2014 kann auf die hier beschriebene Art keine zeitgesteuerte Sicherung erfolgen, da der Server-Agent nicht in den Gratis-Editionen enthalten ist. Daher können auch keine Aufträge erstellt und ausgeführt werden. Falls Sie diese Funktionalität benötigen, müssen Sie zum Beispiel die Standard Edition des SQL Server 2014 einsetzen. Damit Sie beim Einsatz der Express Edition nicht auf eine automatisierte Sicherung verzichten müssen, zeige ich Ihnen später, wie Sie eine solche mit einfachen Mitteln auf eine andere Art einrichten können.

Um eine zeitgesteuerte Sicherung über einen Auftrag für den SQL Server-Agent zu erstellen, gehen Sie folgendermaßen vor

1. Starten Sie eine manuelle Sicherung über das Kontextmenü des Objekt-Explorers, indem Sie für die gewünschte Datenbank den Befehl Tasks/Sichern… ausführen.

2. Nehmen Sie alle Einstellungen für Ihre Sicherung vor. Erstellen Sie zum Beispiel eine vollständige Sicherung für die Datenbank meine_db, die als Sicherungsziel das Sicherungsmedium mein_medium verwendet, das wir in einem der vorhergehenden Abschnitte erzeugt haben. Stellen Sie unter Optionen ein, dass alle vorhandenen Sicherungssätze überschrieben werden sollen.

3. Wählen Sie unter Skript den Unterpunkt Skript für Aktion in Auftrag schreiben. Alternativ können Sie auch die Tastenkombination Strg + Shift + M verwenden

Datenbank sichern - meine_db

4. Das Skript wird als erster Arbeitsschritt in einen neuen Auftrag eingefügt. Auf der Seite Allgemein können Sie den Namen vergeben, den Besitzer und die Kategorie des Auftrags auswählen sowie eine Beschreibung erfassen. Wählen Sie als Kategorie zum     Beispiel Datenbankwartung aus. Wenn Sie möchten, erfassen Sie noch eine Beschreibung für den Auftrag.

Neuer Auftrag

5. Wenn Sie die Seite Schritte auswählen, sehen Sie den Sicherungsauftrag als ersten Schritt eingetragen. Vorläufig ist für diesen der Name 1 Sie können die generierte Transact-SQL-Anweisung über die Schaltfläche Bearbeiten einsehen und editieren, sollten Sie eine Änderung vornehmen wollen. Alternativ können Sie den Schritt auch mit einem Doppelklick öffnen. Auch den Namen des Schrittes können Sie natürlich editieren.

Sinnvollerweise ändern Sie zumindest den Namen für den Auftragsschritt, zum Beispiel auf Sicherung ausführen. Im Feld Befehl können Sie die automatisch eingetragene Transact-SQL-Anweisung zum Ausführen der Sicherung einsehen.

BACKUP DATABASE [meine_db] TO [mein_medium]
WITH NOFORMAT, NOINIT,
NAME = N'meine_db-Vollständig Datenbank Sichern',
SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO

6. Wählen Sie nun die Seite Zeitpläne aus, um einen Zeitplan für die Sicherung festzulegen. Als Erstes vergeben Sie einen Namen für den Zeitplan. Der Name für den Zeitplan sollte sprechend sein, vor allem wenn mehrere Zeitpläne für einen Auftrag vergeben werden. Dies ist zum Beispiel der Fall, wenn Sie unterschiedliche Sicherungszeiten für Tage mit unterschiedlichen Arbeitszeiten verwenden möchten.

Für die Festlegung des Zeitplans stehen Ihnen folgende Optionen zur Auswahl, die Sie im Listenfeld Zeitplantyp einstellen:

  • Automatisch starten, wenn SQL Server-Agent startet: Der Server-Agent ist ein eigener Dienst des SQL Servers, der für alle zeitgesteuerten Vorgänge zuständig ist. Wählen Sie diese Option, so wird die Sicherung durchgeführt, sobald der Dienst läuft oder gestartet worden ist.
  • Starten, wenn sich die CPUs im Leerlauf befinden: Diese Option können Sie verwenden, wenn Ihr Server zurzeit stark belastet ist und Sie eine Periode der Inaktivität für ein einmaliges Starten nutzen möchten, um die Belastung des Gesamtsystems zu minimieren.
  • Wiederholt: Diese Standardoption verwenden Sie, um eine periodische Sicherung festzulegen. Dies ist wohl jene Variante, die am häufigsten zum Einsatz kommen wird. Die genauen Sicherungszeitpunkte legen Sie darunter im Dialog fest.
  • Einmal: Wenn Sie diese Option wählen, legen Sie das Datum sowie die genaue Uhrzeit selber fest, zu der der Sicherungsvorgang einmalig gestartet werden soll.

Der SQL Server bietet Ihnen verschiedene Varianten, die es Ihnen erlauben, von monatlichen Sicherungen bis hin zu einer quasi permanenten Sicherung jeden beliebigen Wiederholungsalgorithmus zu definieren. In der Praxis wird zumeist eine tägliche Sicherung zur Nachtzeit festgelegt. Falls Sie mehrere Datenbanken sichern, sollten Sie die Sicherungszeiten wenn möglich staffeln. Die zeigt Ihnen eine Einstellung, wonach die ganze Woche über von Montag bis Freitag jeweils um 23:30 Uhr die Sicherung gestartet wird. Samstags und sonntags erfolgen keine Sicherungen.

Neuer Auftragszeitplan

Durch die Angabe eines Start- und Enddatums können Sie unterschiedliche Sicherungen für spätere Zeitpunkte definieren, die dann automatisch aufeinander folgen, ohne dass Sie anwesend sein müssen.

Achtung: Zeitgesteuerte Sicherungen werden nur durchgeführt, wenn der SQL Server-Agent-Dienst gestartet ist. Stellen Sie die Startart dieses Dienstes entweder über den Eigenschaften-Dialog im Objekt-Explorer oder die SQL Server-Dienste im Konfigurationsmanager auf automatisch starten.

7. Speichern Sie den fertigen Auftrag ab. Dieser erscheint im Objekt-Explorer im Ordner Aufträge unter dem SQL Server-Agent.

Ich habe in diesem Beispiel die Einstellung gewählt, bei jeder Sicherung alle vorhandenen Sicherungssätze im Sicherungsmedium zu überschreiben. Dabei bin ich davon ausgegangen, dass die Sicherungsdatei nach erfolgter Datenbanksicherung mit der davon unabhängigen Tagessicherung der übrigen Daten mit gesichert wird. Was für ein Zielmedium auch immer dafür verwendet wird. Dadurch stehen mehrere Sicherungen der letzten Tage über die Versionierung der klassischen Sicherung zur Verfügung. Eine Historie über zum Beispiel mehrere Sicherungssätze in einer Datei ist damit nicht erforderlich.

Zeitgesteuerte Sicherung mit der Express Edition

Wie zuvor erwähnt, ist in der Express Edition des SQL Server 2014 der SQL Server-Agent nicht enthalten, weshalb eine über den SQL Server zeitgesteuerte Sicherung nicht möglich ist. Ich möchte Ihnen eine alternative Variante vorstellen, mit der dennoch eine automatisierte tägliche Sicherung erfolgen kann. Dazu sind folgende Schritte notwendig:

  • Erstellen einer SQL-Skriptdatei, welche die Anweisung für die Sicherung enthält.
  • Erstellen einer Kommandozeilen-Batchdatei, die das Kommandozeilentool SQLCmd mit dem Parameter öffnet, die zuvor erstellte Skriptdatei auszuführen.
  • Erstellen einer geplanten Aufgabe unter Windows, die diese Batchdatei zur gewünschten Uhrzeit startet. In älteren Windows-Versionen finden Sie Aufgaben noch unter der Bezeichnung Tasks.

Gehen wir diese Schritte der Reihe nach im Detail durch.

1. Erfassen Sie in einem neuen Abfrageeditor-Fenster die nachfolgende Anweisung oder generieren Sie sie, wie im vorigen Abschnitt beschrieben. (Falls Sie kein Sicherungsmedium haben, geben Sie mit DISK= einen Dateinamen an.)

USE master
GO
BACKUP DATABASE meine_db
TO mein_medium
WITH INIT;
GO

 

2. Speichern Sie die Anweisungen als Skript, zum Beispiel unter dem Namen mein_backup.sql ab.
3. Legen Sie eine neue Kommandozeilen-Batchdatei, beispielsweise mit dem Namen wawi_backup_start.cmd, im selben Ordner an. In diese Batchdatei fügen Sie folgende Anweisung ein:

sqlcmd -U sicherung -P sqlbackup -S (local)
-i d:\db\backup\wawi_backup.sql

 

Mit dieser Anweisung wird das Kommandozeilentool SQLCmd gestartet. Dabei werden folgende Parameter verwendet:

  • -U: der Benutzername, mit dem die Session aufgebaut werden soll
  • -P: das Kennwort des zuvor verwendeten Benutzernamens
  • -S: der Name des Servers, an dem die Anmeldung erfolgen soll. Handelt es sich wie in unserem Beispiel um den lokalen Server, kann dieser Parameter weggelassen werden, sofern es sich nicht um eine benannte Instanz handelt.
  • -i: Über diesen Parameter wird eine Input-Datei angegeben. Dies ist die zuvor erstellte SQL-Skriptdatei, welche die auszuführenden Anweisungen enthält. Wird dieser Parameter beim Aufruf mit angegeben, werden die in der Datei enthaltenen Anweisungen ausgeführt und SQLCmd /? danach sofort wieder beendet.

Bei den beim Aufruf von SQLCmd verwendeten Parametern ist die Groß-/Kleinschreibung zu beachten. Eine Übersicht über alle Parameter erhalten Sie, wenn Sie an der Kommandozeile sqlcmd /? eingeben.

4. Testen Sie die Batchdatei, indem Sie sie manuell aufrufen. Dies muss im Beispielsfall zwar nicht lokal auf dem Rechner erfolgen, auf dem die SQL Server-Instanz läuft, aber ich empfehle es, alle Schritte dort auszuführen. Ich habe in diesem Beispiel den Benutzer sicherung mit dem Kennwort sqlbackup zur Anmeldung am SQL Server verwendet. Ich habe diesen Benutzer zuvor angelegt und in der Datenbank meine_db die Mitgliedschaft in der festen Datenbankrolle db_backupoperator gegeben.

5. Erweitern Sie den Aufruf in der CMD-Datei um eine Ausgabedatei. Damit können Sie das Ergebnis und eine etwaige Fehlermeldung nachträglich zur Überprüfung in dieser Datei finden. SQLCmd schreibt alles in eine Ausgabedatei, was sonst am Bildschirm ausgegeben werden würde. Somit erhalten Sie eine einfache Form von Protokollierung.

sqlcmd -U sicherung -P sqlbackup -S (local)
-i d:\mssql12.mssqlserver\mssql\backup\wawi_backup.sql
-o d:\mssql12.mssqlserver\mssql\backup\wawi_backup_log.txt

 

6. Erstellen Sie eine geplante Aufgabe zum Aufruf dieser CMD-Datei. Unter Windows 7 finden Sie im Windows-Startmenü unter Start\Alle Programme\Zubehör\Systemprogramme\Aufgabenplanung, beim Windows Server 2008R2 unter Start\Verwaltung\Aufgabenplanung. Bei Windows 8/8.1 und Windows Server 2012/2012R2 sind Sie am schnellsten, wenn Sie die ersten Buchstaben unter Start einfach eintippen – zum Beispiel aufg. Auf Windows Servern ist die Aufgabenplanung auch in der Computerverwaltung zu finden.

7. Fügen Sie mit dem Assistenten eine neue Aufgabe hinzu, welche die Batchdatei – zum Beispiel wochentags um 23:30 Uhr – ausführt. Wählen Sie dazu zum Beispiel die Aktion Einfache Aufgabe erstellen…

Stellen Sie bei der geplanten Aufgabe ein, dass sie unabhängig von der Benutzeranmeldung ausgeführt werden soll. Damit ist es nicht erforderlich, dass der betreffende Benutzer am Rechner angemeldet ist. Es muss lediglich der Rechner gestartet sein, damit die Aufgabe ausgeführt wird. Achten Sie bitte darauf, dass auf dem betroffenen Rechner der Dienst Aufgabenplanung gestartet ist. Ich empfehle Ihnen, dies auf einem Server einzurichten, denn dieser wird in der Regel über Nacht nicht heruntergefahren. Idealerweise verwenden Sie den Server, auf dem die SQL Server Express-Instanz läuft. Es macht Sinn, hierfür wie zuvor erwähnt ein eigenes Konto zu erstellen, bei dem das Kennwort nicht abläuft. Legen Sie die Batch-Datei in einem Ordner ab, auf den dieses Konto auch entsprechenden Zugriff hat.

Wiederherstellung einer Datenbank

Um eine Datenbank wiederherzustellen, verwenden Sie entweder den grafischen Dialog oder Sie erledigen das direkt mit der Anweisung RESTORE DATABSE.

Die Basisanweisung weist dazu hat folgende Syntax auf:

RESTORE DATABASE datenbankname
FROM <backup_device> | {DISK|TAPE|URL} = 'sicherungspfad';

 

Weitere Parameter können Sie der Online-Dokumentation entnehmen. Wie beim Sichern einer Datenbank kann auch für den Wiederherstellungsvorgang das Skript direkt im Dialog Datenbank wiederherstellen generiert werden.

Beim Wiederherstellen müssen unter Umständen einzelne Sicherungssätze angegeben oder Pfade für einzelne Dateien geändert werden. Dazu kann es notwendig sein, diese Informationen aus einer Sicherungsdatei vorweg auszulesen. Sicherungssätze, die in einer Sicherungsdatei enthalten sind, können mit der Anweisung RESTORE HEADERONLY angezeigt werden.

RESTORE HEADERONLY FROM DISK = 'D:\DB\Backup\meine_db.bak';

 

Der zu verwendende Sicherungssatz wird über die Option FILE angegeben. Diese entspricht der Nummer in der Datei. Standard ist der Wert 1, falls keine Angabe erfolgt. Daher aufgepasst: Denn der erste Sicherungssatz einer Datei ist stets auch der älteste!

RESTORE DATABASE meine_db
 FROM DISK = 'D:\DB\Backup\meine_db.bak' WITH FILE = 3;

 

Um beim Wiederherstellen den Speicherort einzelner zu verändern, wird der neue Speicherort mit der Option MOVE angegeben. Dies kann notwendig sein, wenn die Datenbank zum Beispiel auf einem anderen Server wiederhergestellt wird, und dort nur andere Pfade verfügbar sind. Dabei muss neben dem logischen Namen der Datei der neue Speicherort angegeben werden. Im nachfolgenden Beispiel wird der letzte Sicherungssatz mit der Nummer 3 aus der Datei meine_sicherung.bak wiederhergestellt; die Dateien werden dabei an neue Speicherorte kopiert.

RESTORE DATABASE meine_db_neu
FROM DISK = 'D:\DB\Backup\meine_sicherung.bak'
WITH FILE = 3,
    MOVE 'meine_db_data' TO 'e:\daten\meine_db_neu.mdf',
    MOVE 'meine_db_log' TO 'f:\protokoll\ meine_db_neu.ldf';

 

Um Dateien an einen neuen Speicherort zu verschieben, muss der logische Name angegeben werden. In unserem Beispiel meine_db_data und meine_db_log. Falls Sie logischen Namen nicht kennen, können Sie diese und weitere Informationen aus den Dateien eines Sicherungssatzes mit der Anweisung RESTORE FILELISTONLY ermitteln.

RESTORE FILELISTONLY
FROM DISK = 'D:\DB\Backup\meine_sicherung.bak'
WITH FILE = 3;

 

Diese Anweisung liefert sowohl den logischen Namen von Datendatei und Protokoll, als auch den jeweiligen physischen Pfad dazu.

Die Wiederherstellung kann sowohl über eine bestehende Datenbank erfolgen, als auch eine neue Datenbank erstellen. Gibt es die Datenbank mit dem in der Anweisung angegebenen Namen nicht, wird automatisch eine neue Datenbank angelegt. Damit ist eine vollständige Datenbanksicherung auch eine einfache Möglichkeit, eine Datenbank auf einen anderen Server zu transferieren.

Ich hoffe, Sie haben damit eine ersten Überblick über die Möglichkeit, eine Datenbank mit dem SQL Server 2014 zu sichern und wiederherstellen. Wie Sie zum Wiederherstellen einer Datenbank die komfortablen Möglichkeiten der grafischen Oberfläche nutzen und wie Sie ein komplettes Desaster-Recovery nach einem Systemausfall durchführen, lesen Sie in meinem Buch SQL Server 2014 – Der schnelle Einstieg.