Wie kann ich eine einzelne FILEGROUP in SQL Server 2008 sichern und wiederherstellen?


7

Zuvor habe ich in ServerFault eine Frage zum Sichern und Wiederherstellen einer SQL Server 2008-Dateigruppe gestellt.

Als ich heute versuchte, RESTOREeines dieser FILEGROUPBackups zu erstellen, wurde folgende Fehlermeldung angezeigt:

Processed 1895080 pages for database 'XWing', file 'XWing' on file 1.
Processed 4 pages for database 'XWing', file 'XWing_log' on file 1.
The database cannot be recovered because the log was not restored.
The database cannot be recovered because the log was not restored.
The roll forward start point is now at log sequence number (LSN) 221218000000010400001. Additional roll forward past LSN 221218000000010400001 is required to complete the restore sequence.
This RESTORE statement successfully performed some actions, but the database could not be brought online because one or more RESTORE steps are needed. Previous messages indicate reasons why recovery cannot occur at this point.
RESTORE DATABASE ... FILE=<name> successfully processed 1895084 pages in 69.504 seconds (213.014 MB/sec).

Ich habe den folgenden SQL-Code verwendet ...

alter Database [XWing] SET SINGLE_USER With ROLLBACK IMMEDIATE

restore database [XWing] filegroup = 'PRIMARY'
FROM  DISK = N'C:\Temp\XWing Manual Full Primary Filegroup.bak'
with
    MOVE N'XWing' TO N'D:\XWing.mdf',
    MOVE N'XWing_log' TO N'L:\XWing_Log.ldf',
    replace, recovery

Ich gehe also davon aus, dass die Datenbank nicht korrekt gesichert wurde?

Dies ist das Skript, mit dem ich das Backup erstellt habe PRIMARY FILEGROUP

BACKUP DATABASE [XWing] FILEGROUP = N'PRIMARY' 
TO  DISK = N'F:\Sql DB Backups\XWing Manual Full Primary Filegroup.bak' WITH NOFORMAT, INIT,
NAME = N'XWing-Full Filegroup Backup', SKIP, NOREWIND, NOUNLOAD, COMPRESSION,  STATS = 10
GO
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N'XWing' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'XWing' )
if @backupSetId is null begin raiserror(N'Verify failed. Backup information for database ''XWing'' not found.', 16, 1) end
RESTORE VERIFYONLY FROM  DISK = N'F:\Sql DB Backups\XWing Manual Full Primary Filegroup.bak' WITH  FILE = @backupSetId,  NOUNLOAD,  NOREWIND
GO

Fragen

  1. Ist die Wiederherstellungssyntax korrekt?
  2. Was ist mit meiner Backup-Syntax?

Prost!

Antworten:


3

Sie müssen die Transaktionsprotokolle wiederherstellen, damit Sie über eine konsistente Datenbank verfügen. Derzeit befindet sich die von Ihnen wiederhergestellte Dateigruppe zu einem anderen Zeitpunkt als der Rest der Datenbank. Sobald die Protokolle vorwärts gerollt wurden und alles konsistent ist, können Sie die Datenbank online schalten.

Wenn Sie sich die Daten in der msdb-Datenbank ansehen, können Sie sehen, welche Transaktionsprotokolldateien Sie wiederherstellen müssen, um die Datenbank online zu schalten.

An Ihrer Sicherungs- und Wiederherstellungssyntax ist nichts auszusetzen.


Hallo Denny - danke für die Antwort :) Aber ich verstehe Blush immer noch nicht :( Also zuerst sieht meine Backup- und Restore-Syntax gut aus. Tick. Aber ... ich muss auch TX-Protokolle wiederherstellen? Aber sind diese nicht drin? meine PRIMARY? Dateigruppe ich bin nicht sicher , was ich brauche die Protokolle auch einen Backup zu tun (Syntax weist) und sie dann in die db wiederherstellen ... ??
Pure.Krome

Transaktionsprotokolle werden in keiner Dateigruppe gespeichert. Die Datenbank als separate Datei, bei der es sich um das Transaktionsprotokoll handelt (normalerweise mit der Dateierweiterung ldf). Sie sichern das Protokoll mit der Anweisung BACKUP LOG, um Dateien zu trennen. Von dort aus müssen Sie die Protokolle in der Datenbank wiederherstellen, um alles zu synchronisieren.
Mrdenny

@AHh .. also brauche ich noch zwei Skripte. eine zum Sichern der FILEGROUP .. und jetzt eine zum Sichern der Protokolle. Stellen Sie dann beide wieder her. Das sagen Sie jetzt? Wenn ja, irgendwelche Hinweise zum BACKUP LOGSkript?
Pure.Krome

Das ist richtig. "SICHERUNGSPROTOKOLL XWING TO DISK = 'D: \ SomePath \ File.trn" Sie möchten jedes Mal, wenn Sie das Protokoll sichern, in eine separate Datei sichern und das Protokoll regelmäßig sichern. Die meisten Benutzer sichern das Protokoll zwischen 10 und 20 Minuten, je nachdem, wie viele Daten Sie verlieren möchten.
Mrdenny

Wenn ich also ein Skript habe, das diese 2 Sicherungen ausführt, würde ich zuerst die FILEGROUP sichern, dann das LOG ... die beiden Dateien zusammen komprimieren .. herunterladen .. FILEGROUP wiederherstellen, dann LOG <--- in dieser Reihenfolge?
Pure.Krome

2

Wie in der Nachricht angegeben, müssen Sie die Protokollsicherungen bis zum Zeitpunkt der Dateigruppensicherung wiederherstellen. Um die Datenbank online zu schalten, muss das Protokoll zum gleichen Zeitpunkt wiedergegeben werden, damit die Datenbank konsistent ist. Das Wiederherstellen nur der primären Dateigruppe ist jedoch eine besondere Situation. Ich glaube, um die primäre Dateigruppe wiederherzustellen, muss man so ziemlich eine vollständige Wiederherstellung durchführen, nicht nur eine Dateigruppe. (Ich bin mir nicht sicher, glaube aber, dass der folgende Text auf diese Anforderung hinweist.)

Grundlegendes zur Funktionsweise der Wiederherstellung und Wiederherstellung von Sicherungen in SQL Server

Konsistenz wiederholen

In der Wiederherstellungsphase werden Daten immer bis zu einem Punkt weitergeleitet, der mit dem Status der Datenbank am Wiederherstellungspunkt übereinstimmt. Alle Daten wurden bis zu einem Punkt vorwärts gerollt, an dem ein Rückgängigmachen erfolgen kann.

Der Status der Datenbank wird durch die Primärdatei wie folgt definiert:

Wenn die Primärdatei wiederhergestellt wird, bestimmt der Wiederherstellungspunkt den Status der gesamten Datenbank. Wenn beispielsweise eine Datenbank zu einem Zeitpunkt wiederhergestellt wird, kurz bevor eine Tabelle versehentlich gelöscht wurde, muss die gesamte Datenbank zu demselben Zeitpunkt wiederhergestellt werden.

Wenn die Primärdatei nicht wiederhergestellt wird, ist der Datenbankstatus bekannt und die wiederhergestellten Daten werden an einen Wiederherstellungspunkt weitergeleitet, der transaktionskonsistent mit der Datenbank ist. SQL Server erzwingt dies.

Die Datenbank kann jedoch Änderungen enthalten, die von Transaktionen vorgenommen wurden, die am Wiederherstellungspunkt nicht festgeschrieben wurden. Bei der Online-Wiederherstellung werden Daten zu einem Zeitpunkt wiederhergestellt, der dem aktuellen Status des Online-Teils der Datenbank entspricht.


Warum bieten sie FILEGROUPBackups an, wenn Sie trotzdem eine vollständige Wiederherstellung durchführen müssen? Eine vollständige Wiederherstellung == eine Datenbanksicherung, dann wiederherstellen? Vielleicht habe ich deine Antwort falsch verstanden. Es macht mir nichts aus, ein NEUES FILEGROUPBackup zu erstellen und wiederherzustellen, wenn ich in meinem Backup-Schritt etwas falsch gemacht habe.
Pure.Krome
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.