Database
 sql >> Datenbank >  >> RDS >> Database

Sichern und Wiederherstellen einer FILESTREAM-fähigen Datenbank

In meinen vorherigen Artikeln habe ich erklärt, wie Sie die FILESTREAM-Funktion in einer SQL Server-Instanz erstellen und konfigurieren. Außerdem habe ich gezeigt, wie man eine Tabelle erstellt, die eine FILESTREAM-Spalte hat und wie man die Daten darin einfügt und löscht.

In diesem Artikel werde ich erklären, wie Sie die FILESTREAM-fähige Datenbank sichern und wiederherstellen. Außerdem werde ich demonstrieren, wie die FILESTREAM-Dateigruppe wiederhergestellt wird, ohne die Datenbank offline zu schalten.

Wie ich in meinen vorherigen Artikeln erklärt habe, müssen wir, wenn wir FILESTREAM auf einer SQL Server-Instanz aktivieren, einen FILESTREAM-Container erstellen, der die FILESTREAM-Dateigruppe enthält. Wenn wir die FILESTREAM-fähige Datenbank sichern, wird die Sicherung der FILESTREAM-Dateigruppe in den Sicherungssatz aufgenommen. Wenn wir die Datenbank wiederherstellen, stellt SQL Server die Datenbank und den FILESTREAM-Container und die darin enthaltenen Dateien wieder her.

Wenn wir eine FILESTREAM-fähige Datenbank sichern, geschieht Folgendes:

  • Sichern Sie alle verfügbaren Datendateien der Datenbank.
  • Sichern Sie die FILESTREAM-Dateigruppe und die darin enthaltenen Dateien.
  • T-Log sichern.

SQL Server bietet die Flexibilität, nur den FILESTREAM-Container zu sichern. Wenn Dateien im FILESTREAM-Container beschädigt werden, müssen wir nicht die gesamte Datenbank wiederherstellen. Wir können nur die FILESTREAM-Dateigruppe wiederherstellen.

In dieser Demo werde ich:

  • Erklären Sie, wie Sie eine vollständige Sicherung der FS-Datenbank und nur den FILESTREAM-Container sichern.
  • Erläutern Sie, wie Sie die FILESTREAM-fähige Datenbank wiederherstellen.
  • So stellen Sie den FILESTREAM-Container online und offline wieder her. Hinweis:SQL Server Enterprise Edition und Developer Edition unterstützen die ONLINE-Wiederherstellung.

Demo-Setup:

In dieser Demo verwende ich:

  1. Datenbank :SQL-Server 2017
  2. Software :SQL Server Management Studio.

Sichern einer FILESTREAM-fähigen Datenbank

Um den Sicherungsprozess zu demonstrieren, habe ich eine FILESTREAM-fähige Datenbank mit dem Namen FileStream_Demo erstellt . Es hat eine FILESTREAM-Tabelle namens Document_Content .

Vollständige Datenbanksicherung

Das Sichern einer FILESTREAM-fähigen Datenbank ist ein unkomplizierter Vorgang. Um eine vollständige Sicherung davon zu erstellen, führen Sie das folgende T-SQL-Skript aus.

BACKUP DATABASE [FileStream_Demo] TO  DISK = N'E:\Backups\FileStream_Demo.bak'
 WITH NOFORMAT, NOINIT,  NAME = N'FileStream_Demo-Full Database Backup', 
 SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

Das Folgende ist das Sicherungsprotokoll, das durch Ausführung des obigen Sicherungsbefehls generiert wird:

/*Begin Backup DataFile*/

Processed 568 pages for database 'FileStream_Demo', file 'FileStream_Demo' on file 1.

/*Begin backup of FILESTREAM container*/

10 percent processed.
20 percent processed.
30 percent processed.
40 percent processed.
50 percent processed.
60 percent processed.
70 percent processed.
80 percent processed.
90 percent processed.
Processed 111106 pages for database 'FileStream_Demo', file 'Dummy-Documents' on file 1.

/*Begin backup of FILESTREAM container*/

Processed 4 pages for database 'FileStream_Demo', file 'FileStream_Demo_log' on file 1.
100 percent processed.

BACKUP DATABASE successfully processed 111677 pages in 18.410 seconds (47.391 MB/sec).

Wie ich am Anfang des Artikels erwähnt habe, erstellt der SQL-Server zuerst eine Sicherungskopie der primären Datendatei, dann der sekundären Datendateien und schließlich der Transaktionsprotokolle. Wie Sie im Sicherungsprotokoll sehen können, sichern Sie zuerst die primäre Datendatei des SQL-Servers, dann die FILESTREAM-Dateigruppe und die damit verbundenen Daten und schließlich die Transaktionsprotokolle.

Sicherung des FILESTREAM-Containers

Wie ich am Anfang des Artikels erwähnt habe, können wir auch ein Backup des FILESTREAM-Containers erstellen. Um eine Sicherung des FILESTREAM-Containers zu erstellen, führen Sie das folgende T-SQL-Skript aus.

BACKUP DATABASE [FileStream_Demo] FILEGROUP = N'Dummy-Documents' TO  DISK = N'E:\Backups\FS_Container.bak' 
WITH NOFORMAT, NOINIT,  NAME = N'FileStream_Demo-Full Database Backup',
SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

Stellen Sie die FILESTREAM-aktivierte Datenbank wieder her

Wenn wir die FILESTREAM-Datenbank wiederherstellen, stellt SQL den FileStream-Container zusammen mit allen Dateien im FILESTREAM-Container wieder her.

Führen Sie die folgenden Aufgaben aus, um die Datenbank wiederherzustellen:

  1. Klicken Sie in SSMS mit der rechten Maustaste auf die Datenbank und wählen Sie Datenbank wiederherstellen aus .
  2. Wählen Sie im Dialogfeld „Wiederherstellen“ die Option Gerät aus und klicken Sie auf Durchsuchen . Ein weiteres Dialogfeld wird geöffnet. Klicken Sie im Dialogfeld auf  Hinzufügen .
  3. Im Sicherungsdatei suchen Navigieren Sie im Dialogfeld durch die Verzeichnisstruktur, klicken Sie auf ein geeignetes Backup und dann auf OK .
  4. Sobald die Backup-Informationen in den Wiederherzustellenden Backup-Sätzen geladen wurden Klicken Sie in der Rasteransicht auf OK um mit der Wiederherstellung des Prozesses zu beginnen.

Alternativ können Sie eine Datenbank wiederherstellen, indem Sie den folgenden Befehl ausführen:

USE [master]
RESTORE DATABASE [FileStream_Demo] FROM  DISK = N'E:\Backups\FileStream_Demo.bak' WITH  FILE = 1,  NOUNLOAD,  STATS = 5
GO

Szenario für die FILESTREAM-fähige Datenbankwiederherstellung

Der Wiederherstellungsprozess der FILESTREAM-Dateigruppe entspricht dem Prozess der Wiederherstellung von Dateigruppen.

Um das Wiederherstellungsszenario zu generieren, erstellen Sie eine FILESTREAM-fähige Datenbank mit dem Namen FileStream-Demo . Die Datenbank hat eine FILESTREAM-Tabelle namens Document_Content . Fügen Sie einige zufällige Daten und Dateien in den Document_Content ein Tabelle.

Führen Sie die folgende Abfrage aus, um Details der in die Tabelle eingefügten Dateien aufzufüllen.

SELECT  
RootDirectory,  
FileName,  
FileAttribute,   
FileCreateDate,   
FileSize,  
FileStreamCol.PathName() AS FilePath FROM Document_Content  order by filesize desc

Die Ausgabe sieht wie folgt aus:

Das Folgende ist ein Screenshot des FILESTREAM-Containers:

Erstellen Sie zunächst eine vollständige Sicherung der Datenbank. Führen Sie dazu folgenden Befehl aus.

BACKUP DATABASE [FileStream_Demo] TO DISK = N'E:\Backups\Full_FileStream_Demo_20180810.bak' WITH NOFORMAT, NOINIT,NAME = N'FileStream_Demo-Full Database Backup'

Erstellen Sie zweitens eine FILEGROUP-Sicherung der FILESTREAM-Dateigruppe mit dem Namen Dummy-Document indem Sie den folgenden Befehl ausführen:

BACKUP DATABASE [FileStream_Demo] FILEGROUP = N'Dummy-Documents' TO  DISK = N'E:\Backups\FileStream_Filegroup_Demo.bak' 
WITH NOFORMAT, NOINIT, NAME = N'FileStream_Demo-Full FILEGROUP Backup'

Um die FILESTREAM-Beschädigung zu erzeugen, löschen Sie einige Dateien aus dem FILESTREAM-Container. Versuchen Sie nach dem Löschen dieser Dateien, Daten aus „Document_Content“ abzurufen, indem Sie den folgenden Befehl ausführen:

Use FileStream_Demo
Go
select * from Document_Content

Sie erhalten die folgende Fehlermeldung:

Msg 233, Level 20, State 0, Line 122
A transport-level error has occurred when receiving results from the server. (provider: Shared Memory Provider, 
error: 0 - No process is on the other end of the pipe.)

Siehe folgenden Screenshot:

Jetzt müssen wir den FILESTREAM-Container wiederherstellen, um diesen Fehler zu beheben. Wir haben eine vollständige Sicherung und eine Sicherung des Dummy-Dokuments erstellt Dateigruppe.

Wir können den gesamten FILESTREAM-Container wiederherstellen, indem wir die FILESTREAM-Dateigruppe wiederherstellen. Ich werde zeigen:

  1. Offline-Wiederherstellung der FILESTREAM-Dateigruppe.
  2. Online-Wiederherstellung der FILESTREAM-Dateigruppe.

Offline-Wiederherstellung der Dateigruppe des FILESTREAM-Containers

Da ich Dateien aus dem FILESTREAM-Container gelöscht hatte, müssen wir nicht die gesamte Datenbank wiederherstellen. Anstatt also die gesamte Datenbank wiederherzustellen, stellen wir die einzige Dateigruppe wieder her. Erstellen Sie dazu zunächst ein Tail-Log-Backup, um die nicht gesicherten Datenänderungen zu erfassen. Die Tail-Log-Sicherung muss mit der NORECOVERY-Option erstellt werden, um die Datenbank in den Wiederherstellungszustand zu versetzen, und das gibt die Möglichkeit, Sicherungen auf die Datenbank anzuwenden. Führen Sie dazu die folgende Abfrage aus:

backup log [FileStream_Demo] to disk ='E:\Backups\FileStream_Filegroup_Demo_Log_1.trn' With NORECOVERY

Sobald die Tail-Log-Sicherung generiert ist, befindet sich die Datenbank im Wiederherstellungsmodus. Jetzt können wir die FILEGROUP-Sicherung mit der Option NORECOVERY auf eine Datenbank anwenden. Führen Sie dazu folgenden Befehl aus:

use master
go
RESTORE DATABASE [FileStream_Demo] FILE='Dummy-Documents' FROM DISK = N'E:\Backups\FileStream_Filegroup_Demo.bak' WITH NORECOVERY,REPLACE;

Wenden Sie nun die Tail-Log-Sicherung mit der Option RECOVERY an. Führen Sie dazu folgenden Befehl aus:

RESTORE LOG [FileStream_Demo] FROM  DISK = N'E:\Backups\FileStream_Filegroup_Demo_Log_1.trn'

Sobald die Sicherung wiederhergestellt ist, ist die Datenbank online und alle Dateien werden im FILESTREAM-Container wiederhergestellt. Um dies zu überprüfen, führen Sie den folgenden Befehl aus:

SELECT  
RootDirectory,  
FileName,  
FileAttribute,   
FileCreateDate,   
FileSize,  
FileStreamCol.PathName() AS FilePath FROM Document_Content  order by filesize desc

Die Ausgabe der obigen Abfrage lautet wie folgt:

Online-Wiederherstellung der FILESTREAM-Dateigruppe

Mit der SQL Server Enterprise Edition können wir die Sicherung wiederherstellen, wenn die Datenbank online ist. Wenn beispielsweise eine Datei F1 der sekundären Dateigruppe FG-1 beschädigt ist, können wir die Datei F1 wiederherstellen, während die Datenbank online bleibt. Die Wiederherstellungsreihenfolge der Offline-Wiederherstellung und der Online-Wiederherstellung ist gleich.

Wie oben erwähnt, erstellen Sie zum Durchführen einer Online-Wiederherstellung der FILESTREAM-Dateigruppe das Dummy-Dokument Datendatei offline. Führen Sie dazu folgenden Befehl aus.

use master
go
Alter database [FileStream_Demo] MODIFY FILE (NAME='Dummy-Documents',OFFLINE)

Um den Status der Datei zu überprüfen, führen Sie die folgende Abfrage aus:

Use [FileStream_Demo]
Go
select File_id, type_desc,name, physical_name,state_desc,size from FileStream_Demo.sys.database_files

Die Ausgabe sieht wie folgt aus:

Wir haben das Dummy-Dokument bereits gesichert Dateigruppe. Sobald die Datendatei offline ist, stellen Sie daher die FILEGROUP-Sicherung in einer Datenbank mit der Option NORECOVERY wieder her. Führen Sie dazu folgenden Befehl aus:

use master
go
RESTORE DATABASE [FileStream_Demo] FILE='Dummy-Documents' FROM DISK = N'E:\Backups\FileStream_Filegroup_Demo.bak' WITH NORECOVERY, REPLACE;

Erstellen Sie jetzt eine Protokollsicherung der Datenbank, um sicherzustellen, dass der Punkt erfasst wird, an dem die Datendatei offline gegangen ist. Führen Sie dazu folgenden Befehl aus:

backup log [FileStream_Demo] to disk ='E:\Backups\FileStream_Filegroup_Demo_Log1.trn'

Führen Sie den folgenden Befehl aus, um die letzte T-Log-Sicherung wiederherzustellen.

use master
go
RESTORE LOG [FileStream_Demo] FROM  DISK = N'E:\Backups\FileStream_Filegroup_Demo_Log1.trn'

Sobald die Protokollsicherung wiederhergestellt ist, werden alle Dateien im FILESTREAM-Container wiederhergestellt, und die Dateigruppe ist online. Um dies zu überprüfen, führen Sie die folgende Abfrage aus:

Use [FileStream_Demo]
Go
select File_id, type_desc,name, physical_name,state_desc,size from FileStream_Demo.sys.database_files

Die Ausgabe sieht wie folgt aus:

Sobald die Sicherung wiederhergestellt ist, ist die Datenbank online und alle Dateien werden im FILESTREAM-Container wiederhergestellt. Um dies zu überprüfen, führen Sie den folgenden Befehl aus:

SELECT  
RootDirectory,  
FileName,  
FileAttribute,   
FileCreateDate,   
FileSize,  
FileStreamCol.PathName() AS FilePath FROM Document_Content  order by filesize desc

Die Ausgabe sieht wie folgt aus:

Zusammenfassung

In diesem Artikel habe ich Folgendes erklärt:

  1. So führen Sie eine Sicherung durch und stellen die FILESTREAM-fähige Datenbank und die FILESTREAM-Dateigruppe wieder her.
  2. So stellen Sie die FILESTREAM-Dateigruppe online und offline wieder her.