Die Wiederherstellung einer Sicherung durch SQL Server führt zu einem Fehler


15

Ich habe eine Datenbank in dev (SQL Server 2005 unter Windows Server 2008), die ich auf prod verschieben muss (SQL Server 2000 unter Windows Server 2003). Mein Prozess ist wie folgt:

  1. Melden Sie sich bei dev an, und öffnen Sie SQL Server Management Studio
  2. Klicken Sie mit der rechten Maustaste auf die Datenbank | Aufgaben | Backup. Behalten Sie alle Standardoptionen (vollständige Sicherung usw.)
  3. Verschieben Sie die .bak-Datei lokal auf prod (kein Netzlaufwerk), melden Sie sich bei prod an, und öffnen Sie SQL Server Enterprise Manager.
  4. Klicken Sie mit der rechten Maustaste auf den Knoten Datenbanken Alle Aufgaben | Datenbank wiederherstellen.
  5. Ändern Sie die Option Als Datenbank wiederherstellen, um denselben Datenbanknamen wiederzugeben.
  6. Klicken Sie auf das Optionsfeld "Vom Gerät". Klicken Sie auf "Geräte auswählen".
  7. Klicken Sie auf Wiederherstellen von: Hinzufügen ..., navigieren Sie zur .bak-Datei (klein - nur 6 MB).

Jetzt bin ich bereit, die Datenbank wiederherzustellen, also klicke ich auf OK und erhalte die folgende Fehlermeldung:

"Die Medienfamilie auf Gerät 'E: ... bak' ist falsch aufgebaut. SQL Server kann diese Medienfamilie nicht verarbeiten. RESTORE DATABASE wird abnormal beendet."

Dieser Fehler tritt sofort auf.

Ich habe ein paar verschiedene Variationen davon ausprobiert - das Wiederherstellen des db to dev-Rechners mit einem anderen db-Namen und anderen Protokolldateinamen (woher er stammt), das Erstellen einer leeren Datenbank mit demselben physischen Pfad zu Dateien und das Wiederherstellen desselben, Erstellen Sie ein paar verschiedene .bak-Dateien und stellen Sie sicher, dass sie überprüft wurden, bevor Sie sie auf prod hochladen. Ich weiß, dass das Verzeichnis für die .mdf- und .ldf-Dateien auf prod vorhanden ist, obwohl die Dateien selbst nicht vorhanden sind. Wenn vor dem Klicken auf "OK" zur Wiederherstellung die Registerkarte "Optionen" aufgerufen wird, wird die folgende Fehlermeldung angezeigt:

Fehler 3241: Die Medienfamilie auf Gerät 'E: ... bak' ist falsch gebildet. SQL Server kann diese Medienfamilie nicht verarbeiten. RESTORE FILELIST wird abnormal beendet.

Hat jemand gute Ideen?


Ich bin einverstanden, habe nur einen Tag damit verbracht und meine Zeit verschwendet, es scheint ein Problem mit der Abwärtskompatibilität zu sein, 2k8 R2 bis 2k5 in meinem Fall.

Antworten:


7

Die Backup-Header in MSSQL2008 unterscheiden sich von denen in MSSQL2005, was wahrscheinlich die Ursache für Ihr Problem ist. Versuchen Sie, die Datenbank anstelle des Backup-Restore-Modells zu exportieren, oder richten Sie MSSQL2008 auf Ihrem DEV-Server ein.


4

Wie Mike Dimmick sagt - SQL 2000 erkennt SQL 2005-Sicherungen nicht (wie Word 2000 die DOCX-Dateien von 2007 nicht erkennt). Daher müssen Sie Ihre Daten in einem Format mit einem niedrigeren gemeinsamen Nenner wie SQL-Skripten migrieren. Probieren Sie den Database Publishing Wizard aus, der Teil des SQL Server Hosting Toolkit ist und eine einzelne SQL-Datei sowohl für das Schema als auch für die Daten generiert.


1
Es ist wichtig zu überprüfen, ob Sie SqlExpress installiert haben (möglicherweise haben Sie es installiert, ohne zu bemerken, dass Sie es haben). Es ist sehr einfach, sich versehentlich bei SqlExpress anzumelden und dann in Panik zu geraten, da Sie damit keine 2008-Datenbank wiederherstellen können. Dies ist wahrscheinlich ein sehr häufiger Grund für diesen Fehler.
Simon

2

Sie können Sicherungen in der SQL Server-Familie vorwärts verschieben, dh von 2000 auf 2005 oder 2008, aber nicht rückwärts: Sie können eine SQL Server 2005-Sicherung nicht unter SQL Server 2000 wiederherstellen.


1

Möglicherweise liegt ein Berechtigungsproblem vor, das verhindert, dass die Datei erstellt wird, wenn Sie versuchen, sie wiederherzustellen. Erstellen Sie auf dem Ziel eine neue Datenbank mit demselben Namen wie Sie möchten, und stellen Sie sie dann darüber wieder her.

Wenn Sie versuchen, die Sicherung von einer externen Festplatte oder einer Netzwerkfreigabe wiederherzustellen, kopieren Sie die Sicherungsdatei vor dem Wiederherstellungsversuch auf den lokalen Computer.


1

Standardmäßig gibt es zwei Objekt-Explorer von SQL Server 2005. Ich vermute, Sie versuchen es mit einem Server / sqlexpress-Objekt. Versuchen Sie, einen anderen wiederherzustellen.


1

(Erleichtertes Seufzen.) Ahhhhh, das ist das Problem.

Ich habe SQL Server 2008 SP1 auf einem Remote-PC ausgeführt. Ich habe die Datenbank gesichert, aber meine lokale Kopie von SQL Server 2008 konnte nicht aus der .bak-Datei wiederhergestellt werden.

Wie [Yini] sagt, war dies auf meine Kopie von SQL Server 2008 zurückzuführen, die meine SQL Server 2005- Instanz auf meinem lokalen PC öffnet , und nicht auf meine SQL Server 2008-Instanz. Genius.

Und ich stimme voll und ganz mit [Yini] überein - fairerweise können Sie eine SQL Server 2008-Sicherung nicht in einer 2005-Instanz wiederherstellen, aber Microsoft könnte uns zumindest eine anständige Fehlermeldung geben.

"Die Medienfamilie auf Gerät 'D: \ DatabaseBackup_21_02_2011.bak' ist falsch aufgebaut. SQL Server kann diese Medienfamilie nicht verarbeiten."

Mein Backup wurde nicht falsch erstellt. Es kann einfach nicht in einer SQL Server 2005-Instanz wiederhergestellt werden , selbst wenn SQL Server 2008 SP1 ausgeführt wird.

Ist es wirklich so schwer das in eine Fehlermeldung zu setzen ............?


0

Ein paar Gedanken:

  • Ungefähr wie groß ist die wiederherzustellende Datenbank?
    Der einzige Support-Artikel zu diesem Fehler bezieht sich auf SQL 2000 und behandelt große Protokolldateien. Wenn Sie nicht mit SQL 2000 arbeiten, kann es hilfreich sein, zuerst zu versuchen, die Größe der Protokolle zu verringern, wenn diese besonders groß sind.

  • Können Sie die Datenbank auf Ihrem Dev-Server wiederherstellen (unter einem anderen Datenbanknamen in verschiedenen Dateien)? Das würde beweisen, ob die Datei selbst in SQL 2005 in Ordnung ist.

  • Können Sie andere Datenbanken von diesem Dev-Server auf Prod wiederherstellen?


0

Hallo allerseits, wie Mike vorschlägt, würde ich den Database Publishing Wizard empfehlen, er leistet wunderbare Arbeit.

Hier ist eine Problemumgehung, die ich anfangs verwendet habe und die ich nicht ganz empfehlen würde - es scheint ein bisschen wie ein Ghetto .


1) Erstellen Sie die Datenbank auf Prod, erstellen Sie einen Datenbankbenutzer mit den richtigen Rechten, öffnen Sie den Port auf Ihrer Firewall, der den Remotezugriff ermöglicht.
2) Klicken Sie in dev in SQL Server Management Studio mit der rechten Maustaste auf db -> tasks -> export data. Achten Sie bei der Auswahl des Ziels darauf, den Anschluss xxx.xxx.xxx.xxx, 1764 anzugeben.
3) Wählen Sie alle zu übertragenden Tabellen aus, klicken Sie 100 Mal auf Weiter, und fertig.

WARNUNG: Das kopiert gespeicherte Prozeduren nicht.
WARNUNG: Dies kopiert Identities für int-Spalten nicht

UPDATE: Es sieht aus wie Sie nicht von 2005 bis 2000 gehen kann ich folgende Beitrag gefunden Link - Text - es klingt wie Sie meine Methoden verwenden , können oben, aber Sie wollen auch an das Skript alle Objekte und führen Sie dann , dass auf 2000.

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.