SQL-Wiederherstellung aus einer .bak-Datei mit NOINIT

7

Dies wird hoffentlich eine nette und schnelle Frage für jemanden da draußen sein. Es geht weiter von meiner vorherigen Frage .

Ich habe eine .BAK-Datei, die ich wiederherstellen möchte. Die .BAK wurde mit dem NOINITArgument erstellt, um zu versuchen, die vorherige Version zu speichern, und daher wurden neuere Daten angehängt (so wie ich es verstehe). Ich habe mich gefragt, ob dies bedeutet, dass bei der Wiederherstellung versucht wird, eine alte Version des Backups zu verwenden.

Das heißt, ich habe die Datenbank gesichert, neue Tabellen hinzugefügt, eine weitere vollständige Sicherung durchgeführt und die hinzugefügten Tabellen gelöscht. Wenn ich versuche wiederherzustellen, erhalte ich die "neuen" Tabellen nicht zurück. Liegt dies daran, dass bei der Wiederherstellung eine Version der Datenbank in der .BAK gefunden wird, die vor den "neuen Tabellen" erstellt wurde? Wenn ja, wie kann ich angeben, dass die neuesten Daten verwendet werden sollen?

BEARBEITEN: Entschuldigung, dass Sie nicht früher angegeben haben, dass eine SQL Server-Datenbank verwendet wird

cprlkleg
quelle
Möglicherweise möchten Sie erwähnen, welche Datenbank Sie verwenden. Orakel? MySQL? SQL Server? PostgreSQL? Etwas anderes?
Meine Antwort geht von SQL Server aus. Kannst du bestätigen?
Thomas Stringer

Antworten:

10

Dies liegt daran, dass bei Nichtangabe des FILEParameters von RESTORE DATABASEstandardmäßig 1 verwendet wird. Dies ist der erste Sicherungssatz auf diesem Medium. Weitere Informationen finden Sie im Abschnitt Angeben eines Sicherungssatzes auf dieser Seite .

Anstatt:

restore database YourDb
from disk = 'C:\yourpath\backupfile.bak';
go

Sie werden tun wollen:

restore database YourDb
from disk = 'C:\yourpath\backupfile.bak'
with file = <n>;
go

Wo Nbefindet sich die Nummer des Sicherungssatzes auf dem Medium? Nkann durch Ausführen RESTORE HEADERONLYauf dem Medium erhalten werden. Die Spalte, mit der Sie sich befassen, soll Positionmit der FILEOption verwendet werden.

Thomas Stringer
quelle
Danke vielmals! Hat perfekt funktioniert. Sie hatten Recht mit Ihrer Annahme, dass ich SQL verwendet habe, entschuldigen Sie, dass Sie dies nicht in Frage gestellt haben. Nur eine letzte Frage (zumindest für den Moment): Kann ich die Ergebnisse der Funktion "Nur Header wiederherstellen" abfragen, um automatisch die maximale Position zu erhalten?
cprlkleg
Ja, Sie können das tun, aber es würde etwas dynamisches SQL und eine temporäre Tabelle erfordern. Nicht allzu schwierig, wenn Sie Code möchten, lassen Sie es mich wissen.
Thomas Stringer