Wenn Sie SQL Server Management Studio (SSMS) oder eine andere GUI zum Verwalten Ihrer Datenbanken verwenden, sind Sie möglicherweise daran gewöhnt, Datenbanken per „Zeigen und Klicken“ zu sichern und wiederherzustellen.
Normalerweise müssen Sie dazu mit der rechten Maustaste auf die Datenbank klicken und Wiederherstellen auswählen oder ähnlich, und folgen Sie dann den Eingabeaufforderungen (z. B. beim Wiederherstellen einer Datenbank in Azure Data Studio).
Aber wenn Sie es jemals mit T-SQL machen müssen, können Sie RESTORE DATABASE
verwenden Erklärung.
Beispiel
Hier ist ein einfaches Beispiel:
RESTORE DATABASE World
FROM DISK = N'/var/opt/mssql/Bak/World.bak'
WITH FILE = 1;
Das ist fast so einfach wie es nur geht. Die RESTORE DATABASE
Die Anweisung hat eine ziemlich komplexe Syntax (wie bei den meisten T-SQL-Dingen), aber diese Anweisung reicht für eine grundlegende Standardwiederherstellungsoperation aus.
In diesem Fall habe ich eine Datenbank namens World wiederhergestellt aus einer .bak-Datei. Ich habe FROM DISK
verwendet um anzugeben, dass es sich um eine .bak-Datei handelt, und ich habe den vollständigen Pfad zu dieser Datei angegeben. Weitere Optionen hier sind FROM TAPE
und FROM URL
.
Ich habe auch WITH FILE = 1
eingefügt hier, aber das ist sowieso der Standardwert. Diese Klausel gibt die zu verwendende Dateinummer des Sicherungssatzes an. Das heißt, welcher Sicherungssatz in der Datei verwendet werden soll (eine Datei kann mehrere Sicherungssätze haben).
Erhalten Sie eine Liste der Backup-Sätze
Sie können RESTORE HEADERONLY
verwenden um eine Liste der Sicherungssätze in der Datei zu erhalten. Genauer gesagt, es gibt eine Ergebnismenge von Backup-Header-Informationen für alle Backup-Sätze zurück.
Beispiel:
RESTORE HEADERONLY
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak';
Dies gibt viele Spalten zurück, daher werde ich sie hier nicht alle präsentieren.
Eine der Spalten heißt Position . Dies ist mit dem FILE =
zu verwenden Option beim Wiederherstellen der Datenbank.
Beispiel mit mehr Optionen
Hier ist ein Beispiel mit mehr Optionen:
RESTORE DATABASE [WideWorldImporters]
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak'
WITH FILE = 1,
MOVE N'WWI_Primary' TO N'/var/opt/mssql/data/WideWorldImporters.mdf',
MOVE N'WWI_UserData' TO N'/var/opt/mssql/data/WideWorldImporters_UserData.ndf',
MOVE N'WWI_Log' TO N'/var/opt/mssql/data/WideWorldImporters.ldf',
MOVE N'WWI_InMemory_Data_1' TO N'/var/opt/mssql/data/WideWorldImporters_InMemory_Data_1',
NOUNLOAD,
STATS = 5;
Dies ist eigentlich das Skript, das Azure Data Studio für mich generiert hat, als ich die GUI-Oberfläche zum Initiieren eines Wiederherstellungsvorgangs verwendet habe. Wenn Sie dies tun, gibt Ihnen Azure Data Studio die Möglichkeit, die Wiederherstellung sofort auszuführen oder ein Skript mit dem T-SQL-Code zu generieren, das Sie später ausführen können.
In diesem Fall verwendet das Skript den MOVE
-Argument, um jeden logischen Dateinamen in der Sicherungsdatei an den angegebenen physischen Dateispeicherort auf dem Betriebssystem zu verschieben. In diesem Fall verwendete die .bak-Datei einen anderen physischen Dateispeicherort (und verwendete Windows-Dateipfade) und musste daher an mein System angepasst werden. Unten finden Sie eine Erklärung, wie Sie diese Informationen erhalten.
Das NOUNLOAD
ist eigentlich eine Bandoption. Es stellt sicher, dass das Band nach Abschluss der Wiederherstellung nicht aus dem Laufwerk entladen wird. Da ich nicht von Band wiederherstellte, wurde diese Option ignoriert.
Die STATS
Mit dem Argument können Sie den Fortschritt des Wiederherstellungsvorgangs messen. Es gibt an, dass jedes Mal eine Nachricht angezeigt wird, wenn ein anderer Prozentsatz abgeschlossen wird. Wenn Sie hier keinen Prozentwert angeben, zeigt SQL Server eine Meldung an, nachdem alle 10 % abgeschlossen sind.
NUR DATEILISTE WIEDERHERSTELLEN
Wenn Sie eine Anweisung wie die vorherige erstellen möchten, die den MOVE
verwendet Argument, um jeden logischen Dateinamen in der Sicherungsdatei an den angegebenen physischen Dateispeicherort auf dem Betriebssystem zu verschieben, können Sie RESTORE FILELISTONLY
verwenden um die logischen Dateinamen (und mehr) zurückzugeben.
RESTORE FILELISTONLY
gibt einen Ergebnissatz zurück, der eine Liste der Datenbank- und Protokolldateien enthält, die im Sicherungssatz enthalten sind.
Hier ist ein Beispiel, das dieselbe WideWorldImporters .bak-Datei aus dem vorherigen Beispiel verwendet:
RESTORE FILELISTONLY
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak';
Ergebnis (bei vertikaler Ausgabe):
-[ RECORD 1 ]------------------------- LogicalName | WWI_Primary PhysicalName | D:\Data\WideWorldImporters.mdf Type | D FileGroupName | PRIMARY Size | 1073741824 MaxSize | 35184372080640 FileId | 1 CreateLSN | 0 DropLSN | 0 UniqueId | 8d30f4f9-a463-404f-805a-9bd1c634b66b ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 11993088 SourceBlockSize | 512 FileGroupId | 1 LogGroupGUID | NULL DifferentialBaseLSN | 626000002440500037 DifferentialBaseGUID | 0c5a4141-4a09-4b31-8c83-217870278065 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL -[ RECORD 2 ]------------------------- LogicalName | WWI_UserData PhysicalName | D:\Data\WideWorldImporters_UserData.ndf Type | D FileGroupName | USERDATA Size | 2147483648 MaxSize | 35184372080640 FileId | 3 CreateLSN | 37000000095200001 DropLSN | 0 UniqueId | 28d406e0-78ff-4400-9a4b-3a05d136b1f3 ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 434962432 SourceBlockSize | 512 FileGroupId | 2 LogGroupGUID | NULL DifferentialBaseLSN | 626000002440500037 DifferentialBaseGUID | 0c5a4141-4a09-4b31-8c83-217870278065 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL -[ RECORD 3 ]------------------------- LogicalName | WWI_Log PhysicalName | E:\Log\WideWorldImporters.ldf Type | L FileGroupName | NULL Size | 104857600 MaxSize | 2199023255552 FileId | 2 CreateLSN | 0 DropLSN | 0 UniqueId | 6ac6807e-8774-415b-8efc-e8c569b0855e ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 0 SourceBlockSize | 512 FileGroupId | 0 LogGroupGUID | NULL DifferentialBaseLSN | 0 DifferentialBaseGUID | 00000000-0000-0000-0000-000000000000 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL -[ RECORD 4 ]------------------------- LogicalName | WWI_InMemory_Data_1 PhysicalName | D:\Data\WideWorldImporters_InMemory_Data_1 Type | S FileGroupName | WWI_InMemory_Data Size | 0 MaxSize | 0 FileId | 65537 CreateLSN | 624000000336200003 DropLSN | 0 UniqueId | f65663c8-a250-433e-bbe6-e13a5599a607 ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 980090880 SourceBlockSize | 512 FileGroupId | 3 LogGroupGUID | NULL DifferentialBaseLSN | 626000002440500037 DifferentialBaseGUID | 0c5a4141-4a09-4b31-8c83-217870278065 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL
Wir können also sehen, dass die physischen Speicherorte dieser Datei Windows-Dateipfade verwenden. Zum Beispiel die erste (mit dem logischen Namen WWI_Primary ) hat den physischen Speicherort D:\Data\WideWorldImporters.mdf .
In meinem Fall habe ich die Datenbank auf SQL Server für Linux wiederhergestellt (der in einem Docker-Container auf meinem Mac ausgeführt wird). Als ich also diese .bak-Datei auf meinem System wiederhergestellt habe, musste ich die physischen Pfade an mein System anpassen.
Natürlich können Sie bei Bedarf auch die Dateipfade bei der Wiederherstellung auf einem Windows-Rechner ändern.
Die vollständige Syntax
Das Sichern und Wiederherstellen von Datenbanken kann je nach Ihren Anforderungen recht aufwendig sein. Das RESTORE
Die Anweisung ist so konzipiert, dass sie viele verschiedene Szenarien abdeckt. Insbesondere werden die folgenden Wiederherstellungsszenarien behandelt:
- Stellen Sie eine vollständige Datenbank aus einer vollständigen Datenbanksicherung wieder her (eine vollständige Wiederherstellung).
- Stellen Sie einen Teil einer Datenbank wieder her (eine Teilwiederherstellung).
- Stellen Sie bestimmte Dateien oder Dateigruppen in einer Datenbank wieder her (eine Dateiwiederherstellung).
- Stellen Sie bestimmte Seiten in einer Datenbank wieder her (eine Seitenwiederherstellung).
- Ein Transaktionsprotokoll in einer Datenbank wiederherstellen (eine Transaktionsprotokollwiederherstellung).
- Setzen Sie eine Datenbank auf den Zeitpunkt zurück, der durch einen Datenbank-Snapshot erfasst wurde.
Die vollständige Syntax enthält viele Optionen. Wenn Ihre Anforderungen also den Umfang dieses Artikels überschreiten, sehen Sie sich die Microsoft-Dokumentation für das offizielle RESTORE
an Syntax und Erklärung.
Lesen Sie auch Microsofts Überblick über Wiederherstellung und Wiederherstellung, um einen Überblick über die verschiedenen Überlegungen und Ansätze zum Wiederherstellen von Datenbanken zu erhalten.