Restore einer differenziellen Sicherung

15/03/2008 - 09:24 von Michael Lupp | Report spam
Hallo NG,

ich stehe vor einem Ràtsel. Ich teste gerade eine Sicherungsstrategie
mit differenziellen Sicherungen. Das mache ich so:
Ich mache unter SQL 2008 (sollte aber bei 2005 nicht anders sein) eine
Vollbackup einer Test-Datenbank. Dann àndere ich einen Datensatz und
schiebe eine differenzielle Sicherung hinterher.
Danach lösche ich die Datenbank vom Server und restauriere Sie mit dem
Vollbackup. Danach möchte ich die differenzielle Sicherung einspielen.
Dazu gehe ich wieder auf Restore, wàhle die Datenbank aus, suche mir
meine Diff-Sicherung raus und klicke auf OK. Danach bekomme ich folgende
Fehlermeldung:

System.Data.SqlClient.SqlError: The log or differential backup cannot be
restored because no files are ready to rollforward.
(Microsoft.SqlServer.Smo)

Ich habe mich schon durch die Hilfen geklickt und immer nur gefunden,
dass die differenzielle Sicherung normalerweise keine Fallstricke bietet.

Hier noch ein paar technische Details:
SQL2008 CTP Feb. 2008
Datenbankwiederherstellungsmodell Simple
Keine offenen Connections

Kann mir jemand auf die Sprünge helfen?

Michael
 

Lesen sie die antworten

#1 Elmar Boye
16/03/2008 - 09:55 | Warnen spam
Hallo Michael,

Michael Lupp schrieb:
ich stehe vor einem Ràtsel. Ich teste gerade eine Sicherungsstrategie
mit differenziellen Sicherungen. Das mache ich so:
Ich mache unter SQL 2008 (sollte aber bei 2005 nicht anders sein) eine
Vollbackup einer Test-Datenbank. Dann àndere ich einen Datensatz und
schiebe eine differenzielle Sicherung hinterher.
Danach lösche ich die Datenbank vom Server und restauriere Sie mit dem
Vollbackup. Danach möchte ich die differenzielle Sicherung einspielen.
Dazu gehe ich wieder auf Restore, wàhle die Datenbank aus, suche mir
meine Diff-Sicherung raus und klicke auf OK. Danach bekomme ich folgende
Fehlermeldung:

System.Data.SqlClient.SqlError: The log or differential backup cannot be
restored because no files are ready to rollforward.
(Microsoft.SqlServer.Smo)



Der Fehler (3117) tritt auf, wenn die Datenbank bereits bei
der ersten Datei mit RECOVERY wiederhergestellt wird,
dort muß NORECOVERY angeben werden.
Das RECOVERY darf erst beim Wiederherstellen der differentiellen
Sicherung passieren.

Ich habe mich schon durch die Hilfen geklickt und immer nur gefunden,
dass die differenzielle Sicherung normalerweise keine Fallstricke bietet.



Ein Fallstrick ist das nicht, eher Grundkonzept für Sicherungen:
Das obige gilt für differentielle wie Protokollsicherungen.
Nur die letzte Sicherung darf ein RECOVERY ausführen, da damit
alle nicht abgeschlossenen Transaktionen verworfen werden und
kein Rollforward für sicherungsübergreifende Transaktionen
möglich ist.
(Wenn Du beim testen bist, kannst Du da gleich weitermachen)

Unten mal ein Skript zum Üben (Pfade anpassen)

Gruß Elmar

USE master
GO

CREATE DATABASE TestDb ON PRIMARY
( NAME = N'TestDb', FILENAME = N'H:\MSSQL9\MSSQL.2\MSSQL\Data\TestDb.mdf', SIZE = 3072KB)
LOG ON ( NAME = N'TestDb_log', FILENAME = N'G:\MSSQL9\MSSQL.2\MSSQL\Data\TestDb_log.ldf', SIZE = 1024KB)
GO
USE TestDb
GO
CREATE TABLE dbo.Tabelle (
id int NOT NULL PRIMARY KEY,
Daten nvarchar(40) NOT NULL)
GO

INSERT INTO dbo.Tabelle VALUES(1, N'Zeile 1')
INSERT INTO dbo.Tabelle VALUES(2, N'Zeile 2')
GO

BACKUP DATABASE TestDb
TO DISK = N'H:\MSSQL9\MSSQL.2\MSSQL\Backup\TESTDB_FULL.BAK'
WITH INIT
GO

DELETE FROM dbo.Tabelle WHERE id = 1
GO

BACKUP DATABASE TestDb
TO DISK = N'H:\MSSQL9\MSSQL.2\MSSQL\Backup\TESTDB_DIF.BAK'
WITH DIFFERENTIAL, INIT
GO

USE master
GO
DROP DATABASE TestDb
GO

RESTORE DATABASE TestDb
FROM DISK = N'H:\MSSQL9\MSSQL.2\MSSQL\Backup\TESTDB_FULL.BAK'
WITH FILE = 1, NORECOVERY -- NORECOVERY ist ein Muss
GO
RESTORE DATABASE TestDb
FROM DISK = N'H:\MSSQL9\MSSQL.2\MSSQL\Backup\TESTDB_DIF.BAK'
WITH FILE = 1, RECOVERY
GO

SELECT * FROM TestDb.dbo.Tabelle
GO

Ähnliche fragen